找回密码
 注册
关于网站域名变更的通知
查看: 575|回复: 1
打印 上一主题 下一主题

Matlab的textscan指令

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-30 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
, }/ \9 k) Z0 v# R/ M6 M
Matlab的textscan指令8 H3 k* H* \3 w3 a  f5 }
最近在玩学长给的一个资料档,里头有文字和数据混何在一起,要用Matlab来读取. 要是以前的话,大概就很笨的用手动的方式把文字去掉,再让Matlab来读. 不过最近才发现Matlab7的一个新指令textscan可以很方便的协助读取文字档中的字串与数据矩阵. 利用这个指令很快的就完成读取文字档中数个不同大小的数字矩阵了.
8 @1 H5 B& `" @, z( ]. w " `# i: ]4 _5 Z. ]6 M+ h) b
textscan指令在matlab的说明档找得到说明,在此就不赘言了,有空再写下相关的心得.# Z1 ~, I9 e+ H3 y

) V' Z5 |& u2 |# j3 ?6 u
; T0 c3 R0 o3 z! L举目前的资料档为例,首先头4行是文字,要忽略,接下来是123乘1个数据. 一开始我的写法是:
6 |! J( p. @6 C* x; c* O%skip strings (total 16 strings)
) I- k6 C0 `9 Ttextscan(fid, '%*s', 16);3 |5 T+ ~! E" B# }
%read x axis
, O# H/ Y- s9 u- H( u7 Y9 ?7 Kxs = fscanf(fid, '%f', [1 123]);
$ @" n2 n' R# ]" l 3 Q  U4 p5 L% a8 a, ^7 ]
%*s代表跳过一个字串,然后反覆16次. textscan似乎会移动档案起始读取的pointer,所以fscanf会接着从第16个字串之后的资料开始读取,相当便利. xs为1x123的矩阵   Z/ b. ~4 W5 X1 M# z
" W+ g: m! T- {7 W
另一种写法是
. ~# R* Q0 C' |  s/ b+ zxs=cell2mat(textscan(f1,'%f',123,'HeaderLines',4));8 L! I8 K7 N7 x4 [6 t  z8 C5 T
# p2 R! ?7 ^" w$ X9 {( `
当中在textscan中加入headerline表示要忽略若干行,在此为跳过4行再读取资料. 最后xs为123乘1的矩阵. textscan给的格式是cell,所以需要用cell2mat将之转成matrix.9 ~/ n  l  l! P# v; H0 Y+ h9 n
6 z' Y/ s: i* f
# j8 ?! e; m' M# |! @- U9 N) v! M
资料档的最后有个123乘34的数据矩阵要读取. 最初我的写法为:
) D/ x, ?$ i- W; h( a, J0 Y% ntextscan(f1, '%*s', 13);
( D3 j. R7 i$ }" z, Lez = fscanf(f1, '%f', [34 123]);+ D) D% D$ A; b# m

1 W; }- ~" v( n0 o最后ez是34乘123的矩阵,转置后就是123x34原矩阵4 ^- c) M# T8 ?! ^" Y6 Q$ a# M

' M# p% v! R1 F' N# B& A ! S  M. n: y" S$ J
另外一种改良的写法为:
- e, |. J, B/ \( U& p; @FormatString=[repmat(' %f',1,34)];
) B: F# x" t0 \( S2 X- H0 gez = cell2mat(textscan(f1,FormatString,123,'HeaderLines',3));/ P5 @6 ]! _- p
6 H* l) C5 c9 M; @2 W
实际上要忽略的行数只有2行,但是下参数的时候却一定要下3才会成功,可能是之前的数据尾端也算一行. 最后ez为123乘34的矩阵7 U( _6 F; `6 S5 Z+ n$ z$ i7 W
: x' p, N: O4 h+ C" {+ V
若搭配上matlab网站的范例利用loop来侦测行数,使得读取资料档能变得更有弹性,不过在一般的状况,以上的方式已相当受用.
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-3-30 18:59 | 只看该作者
    Matlab的textscan指令
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 03:55 , Processed in 0.156250 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表