Ich versuche, mit PARSE eine CSV-Zeile in einen Rebol-Block zu verwandeln. Einfach genug, um in offenen Code zu schreiben, aber wie bei anderen Fragen versuche ich zu lernen, was der Dialekt ohne das tun kann.Wie benutzt man den PARSE-Dialekt, um eine Zeile von einer CSV einzulesen?
Also, wenn eine Zeile sagt:
"Look, that's ""MR. Fork"" to you!",Hostile Fork,,http://hostilefork.com
Dann möchte ich den Block:
[{Look, that's "MR. Fork" to you!} {Hostile Fork} none {http://hostilefork.com}]
Probleme bemerken:
- Embedded Anführungszeichen in CSV-Strings werden mit
""
angegeben - Kommas können in Anführungszeichen stehen und h ENCE Teil des wörtlichen, nicht eine Spaltenseparator
- benachbarten Spalte Trenn Kommas zeigen ein leeres Feld
- Strings, die keine Anführungszeichen oder Kommas ohne Anführungszeichen
- Im Moment erscheinen können wir die Dinge halten können wie
http://rebol.com
als STRING! statt LOAD sie in Typen wie URL!
ing Um es einheitlich zu machen, das erste, was ich tue, ist ein Komma an die Eingangsleitung anhängen. Dann habe ich eine column-rule
, die eine einzelne Spalte mit einem Komma endet beendet ... die entweder in Anführungszeichen oder nicht sein kann.
Ich weiß, wie viele Spalten es sollte in die Kopfzeile fällig, so dass der Code dann sagt:
unless parse line compose [(column-count) column-rule] [
print rejoin [{Expected } column-count { columns.}]
]
Aber ich bin ein wenig auf das Schreiben column-rule
stecken. Ich brauche einen Weg im Dialekt, um auszudrücken "Sobald Sie ein Zitat finden, überspringen Sie Zitat-Paare, bis Sie ein Zitat finden, das ganz allein steht." Was ist ein guter Weg, das zu tun?
Fantastische Reaktionszeit auf eine Antwort, die (bis jetzt) scheint, an den verrückten Daten zu arbeiten, die ich es gegeben habe! – HostileFork