从csv文件中读取多行

时间:2014-10-15 15:37:52

标签: matlab csv textscan

我有一个csv文件,当我在笔记本中打开它时看起来如下...

  

VAL1,VAL2,VAL3,VAL4,val5,VAL6,val7,的Val8,val9,val10,VAl11难,val12,val13,结果   63,1,1,145,233,1,2,150,0,2.33,0,6,F
  67,1,4,160,286,0,2,108,1,1.5,2,3,3,T
  67,1,4,120,229,0,2,129,1,2.6,2,2,7,T
  37,1,3,130,250,0,0,187,0,3.5,3,0,3,F

我想将这些数据读入matlab并找到真正看起来很有希望的this问题。我的实现代码如下......

fid = fopen(path);
out = textscan(fid,'%f%f%f%f%f%f%f%f%f%f%f%f%f','HeaderLines',1,'delimiter',',','CollectOutput',1);
fclose(fid);

然而,这似乎只是在第一行中读到了matlab。如何让它在整个文件中读取?

out{1}
ans =
      63.0000    1.0000    1.0000  145.0000  233.0000    1.0000    2.0000  150.0000         0    2.3000    3.0000         0    6.0000

2 个答案:

答案 0 :(得分:1)

在我的桌子上撞了一会儿之后,我发现问题可能是因为我还没有在格式说明符中指定结果字符串。这是我在代码中不需要的数据,因此我将其删除了。最后添加和添加%s允许读出所有数据。

注意将来:指定格式说明符中的所有字段,并在编码时忽略它们。

实际代码应如下所示......

out = textscan(fid,'%f%f%f%f%f%f%f%f%f%f%f%f%f%s','HeaderLines',1,'delimiter',',','CollectOutput',1);

答案 1 :(得分:0)

textscan经常发生的情况是,如果你使用了错误的说明符,或者文件中有意外的东西,textcan会尽可能多地读取文件,那么当它到达某个东西时会停止它无法正确解析。不幸的是,它无声地停止,没有错误。无法读取完整文件或输出似乎已停止在线路中间的输出是此问题的常见症状。如果您不需要字符串,可以告诉textscan使用*跳过它们:

out = textscan(fid,''%f%f%f%f%f%f%f%f%f%f%f%f%f%*s','HeaderLines',1,'delimiter',',','CollectOutput',1);

构建更长格式说明符以使用repmat时可能更容易:

out = textscan(fid, [repmat('%f',[1,13]),'%*s'],'HeaderLines',1,'delimiter',',','CollectOutput',1);