Próbuję użyć PARSE, aby przekształcić linię CSV w blok Rebola. Łatwo napisać w otwartym kodzie, ale tak jak w przypadku innych pytań, staram się dowiedzieć, co dialekt może zrobić bez tego.Jak używać dialera PARSE do czytania w wierszu z pliku CSV?
Więc jeśli linia mówi:
"Look, that's ""MR. Fork"" to you!",Hostile Fork,,http://hostilefork.com
Następnie chcę bloku:
[{Look, that's "MR. Fork" to you!} {Hostile Fork} none {http://hostilefork.com}]
Problemy zauważyć:
- Osadzone cudzysłowy w ciągi CSV są oznaczone
""
- Przecinki mogą znajdować się w cudzysłowach i h część ence z dosłownym, a nie separatorem kolumny
- Sąsiednie przecinki oddzielające kolumny wskazują pustym polu
- ciągi, które nie zawierają cytaty lub przecinki mogą pojawić się bez cudzysłowów
- Na razie możemy przechowywać rzeczy jak
http://rebol.com
jako STRING! zamiast LOAD ing je do typów, takich jak URL!
aby uczynić go bardziej jednolite, pierwszą rzeczą, jaką mogę zrobić, to dołączyć przecinek do linii wejściowej. Następnie mam column-rule
, który przechwytuje pojedynczą kolumnę zakończoną przecinkiem ... który może być cytowany lub nie.
wiem ile kolumn nie powinno wynikać z linii nagłówka, więc kod następnie mówi:
unless parse line compose [(column-count) column-rule] [
print rejoin [{Expected } column-count { columns.}]
]
Ale jestem trochę zatrzymany na piśmie column-rule
. Potrzebuję sposobu w dialekcie, aby wyrazić "Gdy znajdziesz cytat, pomijaj cytowane pary, aż znajdziesz wycenę stojącą zupełnie sama." Co to jest dobry sposób na zrobienie tego?
Fantastyczny czas odpowiedzi na odpowiedź, która wydaje się (do tej pory) pracować nad zwariowanymi danymi, które mu dałem! – HostileFork