Matlab读取文件的一些小trick(textscan与 csvread)

来源:互联网 发布:linux命令大全 pdf 编辑:程序博客网 时间:2024/05/22 01:55

做各种各样的实验,总会碰到各种形式的文件需要加载,特别是需要用到别人写好的数据文件时。什么textread, fread,frprintf, fopen,csvread各种用。虽然我已经用了有一些年头,可是当碰到一些有着不同形式的数据文件时,总要花上半天时间才能够勉强写出读文件的代码。比方说:

有一个文件是csv格式的,这时我就用到了Matlab中自带的函数,csvread,但是它里面有不同类型的数据,字符串、数字等,如:

name,tag,x00,y00,x01,y01,x02,y02,x03,y03
i000qa-fn,0000,-39,-28,-39,-61,-38,-88
i000qb-fn,0000,-78,-37,-83,-67,-80,-98

…………

而csvread只对数字有效,而我只用到第二行、第三列以后的数字,用下面的代码忽略前面的字符串内容:

loc = csvread(loc_file, 1, 2); % loc_file是csv文件名

后面两个参数分别指定起始行与列,默认为0。

我刚开始还用了个比较麻烦的办法,使用fopen来打开,然后使用fscanf来读,那叫一个累呀。


第二行以后的第一列i000qa-fn,i000qb-fn,……,这些字符串我也想读取出来。这里又使用了fopen来打开文件,然后:

 fgetl(fid); i = 1; while ~feof(fid)       str = fgetl(fid);       img_name(i) = textscan(str, '%s %*[^\n]', 'delimiter', ',');       i = i + 1; end

textscan中第二个参数:'%s %*[^/n]',是指截取该行的字符串,后面的其它任何数字格式的内容统统忽略;

第三个参数:'delimiter', ',',表示每个子字符串的分隔符是‘,’,默认为空格。


 

原创粉丝点击