使用 textscan 读取 Octave 中格式错误的 CSV 文件

using textscan to read badly formatted CSV file in Octave

我正在尝试使用 textscan 在 Octave 中读取 CSV 文件,但 CSV 文件的格式并不总是正确。以下 mcve 应该可以说明问题:

假设文件如下:

12/01/2020,12,1,2020,0,0,Russia,RU,RUS,145872260,Europe,0
11/01/2020,11,1,2020,0,0,Russia,RU,RUS,145872260,Europe,0
10/01/2020,10,1,2020,0,0,Russia,RU,RUS,145872260,Europe,0
09/01/2020,9,1,2020,0,0,Russia,RU,RUS,145872260,Europe,0
08/01/2020,8,1,2020,0,0,Russia,RU,RUS,145872260,Europe,0
07/01/2020,7,1,2020,0,0,Russia,RU,RUS,145872260,Europe,
06/01/2020,6,1,2020,0,0,Russia,RU,RUS,145872260,Europe,
05/01/2020,5,1,2020,0,0,Russia,RU,RUS,145872260,Europe,

您会注意到最后 3 行中缺少最后的 0。显然,我可以进入并在 Notepad++ 或类似工具中手动编辑 CSV 文件,但我们正在谈论数万行代码,我只是觉得必须有更好的解决方案。

我的代码应该是这样的(请注意,我曾尝试使用 %*f 作为最后一个元素来告诉 Octave 跳过它,但这似乎不起作用):

fname = 'mcve.csv'; % the above file
fid = fopen(fname);
csv_data = textscan(fid,'%s %d %d %d %d %d %s %s %s %d %s %*f','Delimiter',',');
fclose(fid);

如果您随后查看 csv_data,您会发现日期不正确(其余数据看起来没问题):

>> csv_data{1}
ans =
{
  [1,1] = 12/01/2020
  [2,1] = 11/01/2020
  [3,1] = 09/01/2020
  [4,1] = 08/01/2020
  [5,1] = 07/01/2020
  [6,1] = /01/2020
  [7,1] = /01/2020
}

除了我已经尝试过的 %*f 之外,关于如何解决此问题或其他尝试的任何想法?

使用 io 包中的 csv2cell