Daten und Tabellen · CSV Reiniger
Wie ein CSV-Parser Anführungszeichen, eingebettete Kommas und Zeilenumbrüche in Feldern verarbeitet
· Wie es funktioniert
csv Analyse Datenformate
Die Aufteilung nach Kommas funktioniert so lange, bis ein Feld ein Komma, ein Anführungszeichen oder einen Zeilenumbruch enthält. In diesem Beitrag wird die kleine Zustandsmaschine erläutert, die ein echter CSV-Parser verwendet, warum es Quotierungsregeln gibt und was ein Reparaturtool tut, wenn die Quotierung fehlerhaft ist.
Ein Adressfeld mit einem Komma hat jede Spalte nach rechts verschoben – warum naive Aufteilung kein Parsing ist
Das Teilen einer Zeile an jedem Komma schlägt fehl, sobald eine Postanschrift, Notiz oder Produktbeschreibung dieses Zeichen enthält. Das Trennzeichen beendet ein Feld nur, solange sich der Parser außerhalb eines in Anführungszeichen gesetzten Felds befindet. Innerhalb von Anführungszeichen gehört das gleiche Byte zum Wert und muss unverändert in der Vorschau ankommen.
ToolAcre beweist dies mit Tests, anstatt davon auszugehen, dass CSV einfacher Text ist. Eine Semikolon-Datei, die Kommas in zitierten Notizen enthält, wird immer noch als durch Semikolons getrennt erkannt, da jeder Kandidat in Zeilen analysiert wird, bevor seine rechteckige Form bewertet wird. Die reinen Interpunktionszahlen entscheiden nie über den Dialekt.
Die Anführungszeichenregeln – Felder, die Trennzeichen, Anführungszeichen oder Zeilenumbrüche enthalten, werden in doppelte Anführungszeichen gesetzt und innere Anführungszeichen werden verdoppelt
Ein Feld, das das gewählte Trennzeichen, ein doppeltes Anführungszeichen, einen Zeilenvorschub oder einen Wagenrücklauf enthält, wird während der Serialisierung in Anführungszeichen gesetzt. Ein wörtliches doppeltes Anführungszeichen innerhalb eines Felds mit Anführungszeichen wird durch zwei benachbarte Anführungszeichen dargestellt. Beim Parsen trägt dieses Paar ein Anführungszeichen zur Zelle bei und schließt das Feld nicht.
Anführungszeichen öffnen nur dann einen Anführungszeichenstatus, wenn sie am Anfang eines ansonsten leeren Felds erscheinen. In einem nicht in Anführungszeichen gesetzten Wert wie der Pipe „12“ bleiben die Anführungszeichen literale Daten. Diese Implementierungsauswahl wird getestet und verhindert, dass eine Maßmarkierung in der Mitte des Textes nachfolgende Spalten verschluckt.
Ein Parser als Zustandsmaschine – Anführungszeichen im Vergleich zu Anführungszeichen außerhalb und wie jeweils ein Zeichen darüber entscheidet, wo ein Feld endet
Die Kernschleife verfolgt ein aktuelles Feld, eine aktuelle Zeile und einen `inQuotes`-Status. Außerhalb von Anführungszeichen verschiebt das Trennzeichen ein Feld und CR, LF oder CRLF verschiebt eine Zeile. Innerhalb von Anführungszeichen wird jedes Zeichen angehängt, mit Ausnahme eines Anführungszeichens, das entweder ein Escape-Paar bildet oder den Anführungszeichenstatus verlässt.
Diese Ein-Zeichen-Progression erklärt, warum ein einfacher regulärer Ausdruck oder eine Zeilenaufteilung fragil ist. Ob ein Zeilenumbruch einen Datensatz beendet, hängt von der vorherigen Eingabe ab, und ob ein Anführungszeichen das Feld schließt, hängt vom nächsten Anführungszeichen ab. Der Parser überträgt genau diesen minimalen Zustand durch die Zeichenfolge.
Eingebettete Zeilenumbrüche – warum eine Zeile mehrere Zeilen umfassen kann und warum zeilenbasierte Tools wie grep oder wc Datensätze falsch zählen
Ein Feld in Anführungszeichen kann LF, CRLF oder ein einzelnes CR enthalten, und diese Zeichen bleiben innerhalb des Werts. Somit kann ein logischer Datensatz in einem Texteditor mehrere Anzeigezeilen belegen. Das Zählen physischer Zeilen mit einem zeilenorientierten Befehl zählt nicht unbedingt Datenzeilen.
Nach dem schließenden Anführungszeichen übernimmt das nächste Trennzeichen oder Datensatzende wieder die strukturelle Bedeutung. Die Tests von ToolAcre bestätigen sowohl eingebettetes LF als auch eingebettetes CRLF und stellen dann sicher, dass nur eine Zeile erzeugt wurde. Dieses Verhalten lässt sich nicht aus einem RFC-Label ableiten; Es wird direkt von der ausgelieferten Zustandsmaschine ausgeführt.
Fehlerhafte Anführungszeichen – unausgeglichene Anführungszeichen, die den Rest der Datei verschlingen, und wie ein Reparaturtool Felder konsistent in Anführungszeichen setzt
Die Gliederung versprach ein Reparaturangebot, aber ein nicht abgeschlossenes Angebot ist von Natur aus mehrdeutig. ToolAcre meldet `UNCLOSED_QUOTE` für die Zeile, in der der zitierte Zustand begann, und liest anschließend alles in ein Feld. Es wird keine Schlussposition erfunden oder die beabsichtigten Datensätze neu zitiert.
Durch diesen konservativen Fehler bleibt der konsumierte Text zur Überprüfung erhalten und es wird nicht vorgetäuscht, zu wissen, ob ein späteres Zitat oder ein Zeilenumbruch als Daten gedacht war. Korrigieren Sie die Quelle oder generieren Sie den Export neu und laden Sie ihn dann erneut. Durch die Serialisierung kann eine erfolgreich analysierte Tabelle normalisiert werden. Es kann keine Zeilengrenzen wiederherstellen, die durch die fehlerhafte Quelle unerkennbar gemacht wurden.
Fehlerhaftes Angebot wird gemeldet, aber nicht repariert; Ein nicht geschlossenes Feld verbraucht den restlichen Text
Verwenden Sie `name,note` als Kopfzeile, dann eine Zeile mit Ada und einer Notiz, die ein Komma und einen Zeilenumbruch enthält, und eine weitere, deren Notiz `She said "hi"` ist. Zitieren Sie in der Quelle CSV die lange Notiz und schreiben Sie das innere Anführungszeichen als `""hi""`. Der Parser gibt zwei Datenzeilen zurück und behält beide Sonderzeichen bei.
Bei der Serialisierung mit minimalen Anführungszeichen benötigen einfache Namen keine Anführungszeichen, während die Notizfelder in Anführungszeichen gesetzt werden, da sie Strukturzeichen enthalten. Das erneute Parsen dieser Ausgabe ergibt denselben Header und dieselben Zellen, auch wenn redundante Quellzitate verschwunden sind. Datengleichheit, nicht Byte-für-Byte-Formatierung, definiert diesen Roundtrip.
Was dies nicht abdeckt – Dialekte, die Backslash-Escapezeichen verwenden, und Heuristiken zum Erraten der Absicht, wenn das Zitieren wirklich mehrdeutig ist
Backslash-Escape-Dialekte liegen außerhalb des Parsers. Ein Backslash vor einem Anführungszeichen hat hier keine besondere Bedeutung für die Zustandsmaschine; es bleibt Text, während das Zitat nach den Regeln für doppelte Anführungszeichen interpretiert wird. Das Tool lehnt es auch ab, die Absicht zu erraten, wenn ein Eröffnungszitat nicht gefunden wird.
Diese Grenzen sind wichtig, wenn ein Datenbank-Dump importiert wird, der für eine andere Escape-Konvention konfiguriert ist. Identifizieren Sie vor dem Laden den Dialekt des Herstellers oder exportieren Sie ihn mit RFC-ähnlichen Zitaten. Ein Parser, der stillschweigend mehrere inkompatible Escape-Regeln erkennt, kann wörtliche Backslashes in Steuersyntax umwandeln und eine Nichtübereinstimmung verbergen.
Achten Sie darauf, dass die Anführungszeichen und Zeilen intakt bleiben – wie die Anführungszeichenreparatur des ToolAcre CSV Cleaner eine Datei erzeugt, die von Standardparsern korrekt gelesen wird
Durch die Beachtung des Anführungszeichenstatus bleiben Trennzeichen und Datensatzenden innerhalb der Zellen, wo sie hingehören. ToolAcre verarbeitet außerdem drei Zeilenendformulare, entfernt eine führende UTF-8-Stückliste und meldet Nichtübereinstimmungen in der Zeilenbreite. Diese Verhaltensweisen sind unabhängige Teile eines strukturellen Lesevorgangs und keine Sammlung von Such- und Ersetzungstricks.
Nach einer gültigen Analyse verdoppelt die Serialisierung eingebettete Anführungszeichen und setzt alle zu schützenden Felder in Anführungszeichen, wobei standardmäßig CRLF ausgegeben wird. Nach einem ungültigen, nicht abgeschlossenen Angebot stoppen und reparieren Sie anhand von Quellennachweisen. Das Tool kann bekannte Zellen standardisieren; Es erhebt nicht den Anspruch, eine unerkennbare Tabelle zu rekonstruieren.