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