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

做各种各样的实验,总会碰到各种形式的文件需要加载,特别是需要用到别人写好的数据文件时。什么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', ',',表示每个子字符串的分隔符是‘,’,默认为空格。


 

你可能感兴趣的:(matlab,csvread,textread)