World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Gordon 29-Jun-2006 [1120x2] | Wait I said that wrong |
Tomc: Do I understand that :word would be like "get word" and needed in a parse sentence but you can just use the shortcut 'word' most everywhere else? | |
BrianH 29-Jun-2006 [1122] | The colon before the word prevents the interpreter from evaluating active values like functions and parens. It's a safety thing. |
Tomc 29-Jun-2006 [1123x3] | works for me |
you can use :word everywhere you would use word | |
as far as i know | |
BrianH 29-Jun-2006 [1126] | Except when you want an active value assigned to the word to be evaluated, like when you are calling a function. |
Tomc 29-Jun-2006 [1127] | and that would be get 'word not get word |
BrianH 29-Jun-2006 [1128] | In parse rules the :word means something different (not in the code blocks in parens). |
Gordon 29-Jun-2006 [1129] | Thanks Tomc and BrianH. I'll chew on it for a while. Meanwhile I'm working on building some test data for the first problem. |
Tomc 29-Jun-2006 [1130] | in the pars rume (not the paren) it means "be here now" |
Gordon 29-Jun-2006 [1131x2] | okay so in the parse rules (except in a parenthesized code block) it means "be here now"? |
but what does 'be here now' mean? | |
Tomc 29-Jun-2006 [1133] | to change to point you are in what you are parsing backtracking or jumping ahead |
Gordon 29-Jun-2006 [1134] | Thanks |
BrianH 29-Jun-2006 [1135] | Setting the parse position. |
Tomc 29-Jun-2006 [1136] | inside the parens it means what is in what I am parsing at the point pointed to by :word |
Anton 30-Jun-2006 [1137] | BrianH, correct except not, I think, parens: >> foreach word [(1 + 2)][print mold word] (1 + 2) |
BrianH 30-Jun-2006 [1138] | That's interesting. Parens and paths used to be active - oh yeah, that was changeda while ago. Still, there are some value types that are active (function types, lit-path, lit-word) and if you think you will get one of these you should disable their evaluation by referencing them with a get-word, unless you intend them to be evaluated. |
Anton 30-Jun-2006 [1139x2] | parens changed at around View 1.2.10 |
both parens and paths changed between View 1.2.1 and 1.2.5, actually. | |
DideC 30-Jun-2006 [1141x2] | Gordon: I did not read this thread in a whole but as for converting CSV string to/from Rebol blocks, here is some fully functionnal functions : |
;***** Conversion function from/to CSV format csv-to-block: func [ "Convert a string of CSV formated data to a Rebol block. First line is header." csv-data [string!] "CSV data." /separator separ [char!] "Separator to use if different of comma (,)." /without-header "Do not include header in the result." /local out line start end this-string header record value data chars spaces chars-but-space ; CSV format information http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm ] [ out: copy [] separ: any [separ #","] ; This function handle replacement of dual double-quote by quote while copying substring this-string: func [s e] [replace/all copy/part s e {""} {"}] ; CSV parsing rules header: [(line: copy []) value any [separ value] (if not without-header [append/only out line])] record: [(line: copy []) value any [separ value] (append/only out line)] value: [any spaces data any spaces (append line this-string start end)] data: [start: some chars-but-space end: | #"^"" start: any [some chars | {""} | #"," | newline] end: #"^""] chars: complement charset rejoin [ {"} separ newline] spaces: charset exclude { ^-} form separ chars-but-space: exclude chars spaces parse/all csv-data [header any [newline record] any newline end] out ] block-to-csv: func [ "Convert a block of blocks to a CSV formated string." blk-data [block!] "block of data to convert" /separator separ "Separator to use if different of comma (,)." /local out csv-string record value v ] [ out: copy "" separ: any [separ #","] ; This function convert a string to a CSV formated one csv-string: func [val] [head insert next copy {""} replace/all copy val {"} {""} ] record: [into [some [value (append out #",")]]] value: [set v string! (append out csv-string v) | set v any-type! (append out form v)] parse/all blk-data [any [record (remove back tail out append out newline)]] out ] | |
Graham 30-Jun-2006 [1143] | there's also the sql csv thingy in the library |
Gordon 30-Jun-2006 [1144] | DideC: Thanks. I've copied and pasted it for review and added it to my local public library. This script should be useful especially with the html help page. Documentation on a script is very rare and much appreciated. Graham: Did a search using "librarian" and search term of "sql cvs" and didn't come up with anything. Although, I think we've got it covered now anyhow. |
Graham 1-Jul-2006 [1145] | Trying to do some macro expansion in text ... This is not working :( expand-macros: func [tmp [string!] macros [block!] /local white-rule rule len lexp ] [ white-rule: charset [#" " #"^/"] foreach [macro expansion] macros [ len: length? macro lexp: length? expansion rule: compose/deep copy [ [ to here: white-rule (macro) white-rule ( change/part here expansion len ?? macro) lexp skip ] to end ] parse/all tmp [some [rule]] ] tmp ] |
BrianH 1-Jul-2006 [1146x2] | Are macros marked by some starting character? That would make this easier to implement. |
Also, it would help to know whether macro expansions can contain further macros. | |
Graham 1-Jul-2006 [1148] | no, they can be any characters (alphanumeric), but should not contain further macros. |
Tomc 1-Jul-2006 [1149] | ise if the macros are delimited you should be able to do it in one pass |
Graham 1-Jul-2006 [1150x3] | What I was trying to do above is to look for the macro text preceded by a space or newline, and ending in a space or newline. |
and then replace in situ. | |
leaving the whitespace unaffected. | |
Tomc 1-Jul-2006 [1153x2] | in that case sorting them from long to short to begin with will foil recursive macro rxpansion |
at the macros and expansons single tokens | |
BrianH 1-Jul-2006 [1155] | HTML/XML entities begin with & and end with ; for just this reason. What kind of text? can you give us an example? |
Graham 1-Jul-2006 [1156x2] | well, the macros wiill end up being delimited by whitespace |
Heart: Heart regular rate and rhythm, no rubs, murmurs, or gallops noted. A: Abdomen: soft, nontender, no mass, no hernia, no guarding, no rebound tenderness, no ascites, non obese Hbp Hypertension (high blood pressure) #401.9. Ii Type II Diabetes #250.00 | |
BrianH 1-Jul-2006 [1158] | Are macros the only thing delimited by whitespace? |
Graham 1-Jul-2006 [1159x2] | So, someone might type heart: A: with striae |
macros are typed inside normal text. | |
BrianH 1-Jul-2006 [1161] | That A: isn't delimited by whitespace. |
Graham 1-Jul-2006 [1162x2] | it is .. it's preceded by a newline character |
from the line above ... | |
BrianH 1-Jul-2006 [1164] | Not it it were on the first line. Plus, is the : part of the macro? |
Graham 1-Jul-2006 [1165x4] | True .. not if it were on the first line. Some macros contain punctuation. |
so, a: is a macro, whereas "a" is not. | |
the macros are user defined. | |
so, in the examples given above, the first word in each line is the macro. | |
BrianH 1-Jul-2006 [1169] | Do they always contain the same punctuation, is the punctuation per-macro, of does it need to be factored out? |
older newer | first last |