- File csv.pisc — part of check-in [215a72fdda] at 2016-07-30 14:19:21 on branch trunk — More collections work (user: yumaikas94@gmail.com
Artifact 6be3bb68af7e378463fb2d1116a647a71582dbc7:
/* Parsing CSV data in PISC */ "Dicts.pisc" import : parse-csv-core ( reader -- vec [ vec ] ) :reader <vector> :results f :inString [ $inString not ] :outOfString /* Set up the temporary variables */ [ "" :tempStr ] :resetCell [ resetCell <vector> :tempVec ] dup call :resetLine [ $tempVec $tempStr vec-append :tempVec resetCell ] :addCell [ $results $tempVec vec-append :results resetLine ] :addLine /* Debugging "Temp Cell: " $tempStr concat print "Temp Vector: " $tempVec >string concat print */ [ $reader -$EOF call not nip ] :notEOF [ $reader -$read-rune call nip ] :readRune [ notEOF ] [ readRune /* By default, append a char */ t :default [ f :default ] :break dup "," str-eq outOfString and [ addCell break ] when dup "\n" str-eq outOfString and [ addCell addLine break ] when dup "\"" str-eq /* Toggle */ [ outOfString :inString break ] when $default [ $tempStr swap concat :tempStr ] [ drop ] if ] while /* Add the straggling items */ addCell addLine $results ; : csv-of-file ( filepath -- vec [ vec ] ) open-file-reader parse-csv-core ; : csv-of-string ( string -- vec [ vec ] ) str>rune-reader parse-csv-core ;