在最后一个单元格后使用带有垃圾文本的.csv上的readtable

时间:2017-05-10 13:12:27

标签: matlab

我正在使用readtable来阅读底部包含一行垃圾的.csv

ColA, ColB, ColC,
42  , foo , 1.1
666 , bar , 2.2
SomeGunk, 101

(是的,第一行有一个尾随,,但这似乎不是问题)

...这会扰乱readtable

>> readtable(file)
Error using readtable (line 197)
Reading failed at line 4. All lines of a text file must
    have the same number of delimiters. Line 4 has 2 delimiters,
    while preceding lines have 3.

Note: readtable detected the following parameters:
'Delimiter', ',', 'HeaderLines', 1, 'ReadVariableNames', false, 'Format', 
    '%f%q%q%q%q%f%f%f%D%D%q%q%f%f%f%f%f%f%f%f%f'

我该怎么办?

有没有什么东西不能读取文件并再次将其写回去减去最后一行?这看起来很笨拙。如果我必须这样做,最干净的方法是什么?

1 个答案:

答案 0 :(得分:2)

readtable功能可让您手动定义注释符号。来自文档:

  

例如,指定'%'之类的字符以忽略同一行上符号后面的文本。指定两个字符向量的单元格数组,例如{'/*', '*/'},以忽略这些序列之间的任何文本。

这意味着,您可以将'someGunk'定义为评论符号,即以'someGunk'开头的任何行都将被忽略:

>> readtable('gunk.csv', 'Delimiter', ',', 'CommentStyle', 'SomeGunk')
ans =

  2×3 table

    Var1     Var2     Var3
    ____    ______    ____

     42     'foo '    1.1 
    666     'bar '    2.2 

这仅适用于以下条件:1)垃圾行总是'SomeGunk'开头,2)'SomeGunk'不会出现在文件的任何其他位置,并且3 )你不需要任何其他评论符号。