【发布时间】:2020-01-16 01:04:25
【问题描述】:
我尝试在 Octave 中解析以下 CSV 数据。注意最后一列的值为空:
102,19700101,,0.485,
111,19700101,,0.48,
我已将我的行格式定义为:
lineFormat = [repmat('%s',1,1), ...
repmat('%f',1,1), ...
repmat('%q',1,1), ...
repmat('%f',1,1), ...
repmat('%q',1,1)];
如何使用textscan 阅读此内容?当我尝试时:
C = textscan(fid, lineFormat, 'Delimiter', ',')
我错误地得到以下信息(请注意 CSV 中的第二行已移动):
C =
{
[1,1] =
{
[1,1] = 102
[2,1] = 19700101
}
[1,2] =
1.9700e+07
NaN
[1,3] =
{
[1,1] =
[2,1] = 0.48
}
[1,4] =
0.48500
110.00000
[1,5] =
{
[1,1] = 111
[2,1] = 19700101
}
}
我也试过'MultipleDelimsAsOne',但最后一列的值仍然被省略。如何使用textscan 正确读取我的 CSV 数据?此代码在 MATLAB 中按预期工作,但在 Octave 中不正常。
在 Ubuntu 16.04 上运行 Octave 4.2.2。
【问题讨论】:
-
使用
csv2cell包中的csv2cell函数。它比通用的 csvread 函数有用得多。话虽如此,在这种情况下,您也可以轻松使用标准的 csvread,根本不需要复杂的 textscan ... -
@TasosPapastylianou 我相信我需要
textscan,因为最后一列中的值可以是字符串。不过,我会调查csv2cell。 -
是的,做。
csv2cell可以处理任何内容,并且与 textscan 等相比更轻松。值得牢记。 (顺便说一句,我喜欢你的个人资料照片!)