2017-05-10 2 views
2

ich readtable bin mit einem .csv zu lesen, die an der Unterseite eine Linie von klebriger Masse enthält:Mit Readtable auf .csv mit Junk-Text nach dem letzten Zelle

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

(yup, einen erste Linie hat , Hinter , aber das scheint nicht ein Problem)

... zu sein, die readtable aufregt:

>> 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' 

Was kann ich tun?

Gibt es etwas kurz vor dem Lesen der Datei und Schreiben sie wieder minus die letzte Zeile? Das scheint wirklich tollpatschig zu sein. Und wenn ich das tun muss, was ist der sauberste Weg?

+0

Bitte fügen Sie einen Teil Ihres relevanten Codes und ein Beispiel für den Dateiinhalt hinzu. – anyanwu

+0

Ist ['csvread'] (https://www.mathworks.com/help/releases/R2017a/matlab/ref/csvread.html) eine Option? Sie könnten die Daten anschließend in eine Tabelle umwandeln ... – souty

+0

Wie sieht das 'SomeGunk' aus? Vielleicht können Sie das als Kommentar definieren, z. Fügen Sie in Ihrem Beispiel "CommentStyle", "SomeGunk" zu dem "lesbaren" Aufruf hinzu. – hbaderts

Antwort

2

Mit der Funktion readtable können Sie manuell ein Kommentarzeichen definieren. Aus der Dokumentation:

Zum Beispiel, geben Sie ein Zeichen wie '%' Text nach dem Symbol auf der gleichen Linie zu ignorieren. Geben Sie ein Zellenarray mit zwei Zeichenvektoren an, z. B. {'/*', '*/'}, um Text zwischen diesen Sequenzen zu ignorieren.

Das heißt, Sie 'someGunk' definieren kann das Kommentarsymbol sein, dh jede Zeile mit 'someGunk' beginnen werden ignoriert:

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

    2×3 table 

    Var1  Var2  Var3 
    ____ ______ ____ 

    42  'foo ' 1.1 
    666  'bar ' 2.2 

Dies ist nur unter den Bedingungen arbeitet, dass 1) die Mülllinien immer start mit 'SomeGunk', 2) 'SomeGunk' erscheint nirgendwo sonst in der Datei, und 3) Sie brauchen keine anderen Kommentarzeichen.

Verwandte Themen