Matlab不识别CSV文件行末尾的空值

时间:2014-09-16 11:44:35

标签: matlab csv

我正在阅读Matlab的CSV文件;该文件可以包含我想要转换为0的空值

FID=fopen('/file.txt','r');
text_line = fgetl(FID);
C = textscan(text_line,'%d','delimiter',',','EmptyValue', 0);

如果空值位于该行的中间,例如

5,,6

一切正常,变量C得到

5 0 6

作为价值观。如果空值在最后,例如

5,6,

Matlab无法识别它并且C变量得到

5 6

作为值,而不是

5 6 0

编辑丹尼斯回答: 我不明白为什么需要预期的元素数量,我给分隔符,它不够吗?无论如何我试过,结果是不同的:%d%d%d我得到

C = 

    [5]    [0x1 int32]     [6]    

%d所有内容都在第一个元素中

C{1}

ans =

           5
           0
           6

此代码段是将一个非常大的CSV矩阵导入matlab稀疏矩阵的过程的一部分(请参阅我的帖子Handling a very big and sparse matrix in Matlab),我猜(尚未尝试过)第一种方法更快。

无论如何,我的值实际上是每行290k,所以我想它不是一个可行的选项来指定所有%d

1 个答案:

答案 0 :(得分:4)

this answer on matlab central判断,你需要告诉Matlab你期望有多少值。

在您的情况下,我希望将其转换为:

FID=fopen('/file.txt','r');
text_line = fgetl(FID);
C = textscan(text_line,'%d%d%d','delimiter',',','EmptyValue', 0);