Is there a way to parse/all with '|' and ignore double or triple quotes?
I get long strings from an external source that are pipe-delimited; some of the fields can contain 2 or even 3 double quotes in a row, and parse/all is still seeing these as empty field boundaries. For example: >>tmp: {a|bc|"d,e"|""something"more"|g} >> parse/all tmp {|} == ["a" "bc" "d,e" "" {something"more"} "g"] what I *want* is just breaks on the pipes: ["a" "bc" "d,e" {""something"more"} "g"] Is there a way to do that with parse? Many thanks in advance!
posted by: JackKort 13-Mar-2018/12:24:10-7:00
Simple string splitting does not help here, but you can roll your own. >> out: copy [] parse/all tmp [any [copy val to "|" (append out val) skip ] copy val to end (append out val)] == true >> out == ["a" "bc" {"d,e"} {""something"more"} "g"]
posted by: Ingo 13-Mar-2018/14:40:31-7:00
P.S. depending on your version, if your last element is a delimiter, you'll get none or an empty string as the last element.
posted by: Ingo 13-Mar-2018/14:57:15-7:00
Wow! Seems to work great, and very concise. Thank you very much, Ingo!
posted by: JackKort 13-Mar-2018/17:26:55-7:00
|