我正在阅读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
答案 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);