matlab - Textscan 生成预期大小两倍的向量

标签 matlab csv

我想使用 matlab 在矩阵中加载 csv 文件。

我使用了以下代码:

formatSpec = ['%*f', repmat('%f',1,20)];

fid = fopen(filename);
X = textscan(fid, formatSpec, 'Delimiter', ',', 'CollectOutput', 1);
fclose(fid);
X = X{1};

csv 文件有 1000 行和 21 列。 然而生成的矩阵X有2000列和20列。

我尝试使用不同的分隔符,例如“\t”或“\n”,但它没有改变。 当我显示 X 时,我注意到它显示了正确的 csv 文件,但每 2 行有额外的零行。

我也tried添加“HeaderLines”参数:

`X = textscan(fid, formatSpec1, 'Delimiter', '\n', 'CollectOutput', 1, 'HeaderLines', 1);`

但这一次,结果是一个空矩阵。

我错过了什么吗?

编辑:@horchler

我可以毫无问题地读取“test.csv”文件。 每行末尾没有多余的逗号。我使用 python 脚本生成了 csv 文件:我读取了另一个 csv 文件的行,修改了这些行(选择其中一些并对它们进行算术运算),并将新行写入另一个 csv 文件。为了做到这一点,我将第一个 csv 文件的每个元素转换为 float ...

新编辑: 仔细阅读textscan文档,我认为问题在于我的输入文件既不是textfile也不是str,而是包含 float 的文件

编辑:文件中的三行

0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,2 1,-0.3834323,-1.92452324171,-1.2453254094,0.43455627857,-0.24571121,0.4340657,1,1,0,0,0,0.3517396202,1,0,0,0.3558122164,0.2 936975319,0.4105696144,0,1,0 -0.78676,-1.09767,0.765554578,0.76579043,0.76,1,0,0,323124.235998,1,0,0,0,1,0,0,1,0,0,0,2

最佳答案

使用正则表达式怎么样?

X=[];
fid = fopen(filename);
while 1
  fl = fgetl(fid);
  if ~ischar(fl),   break,   end
  r =regexp(fl,'([-]*\d+[.]*\d*)','match');
  r=r(1:21); % because your line 2nd is somehow having 22 elements, 
  % all lines must have same # elements or an error will be thrown
  % Error: CAT arguments dimensions are not consistent.
  X=[X;r];
end
fclose(fid);

关于matlab - Textscan 生成预期大小两倍的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765226/

相关文章:

matlab - opencv中是否有等同于matlab conv2的函数

python - 具有三个输出的 Matlab polyval 函数在 Python/Numpy 中等效

oop - Matlab 中的依赖可观察属性。它有效吗?

c - 更新 CSV 文件中的数据

sql - IBM SQL Query 如何知道我在 CSV 文件中使用的模式?

vectorization - 从代码中删除循环?

javascript - 如何将复选框值导出到 csv 文件?

python - 如何从带有附加分隔符的 csv 在 python 中创建 pandas 数据框?

python - 如何管理 pandas 数据框中的特殊字符\r

Matlab:用3个向量制作等高线图