[REBOL] Using Rebol from within Notetab. Re:
From: jregent:centrum:cz at: 31-Jul-2000 15:28
> Add your own clipbook entries to mine for calling on Rebol
scripts to
> process your text. For example, you can open a tab delimited
text file
> exported from Excel. Select all the text. Click on "Tab
delimited to block"
> and the text will be replaced with a rebol block version of the
data. You
> can also go the other way.
>
> Anyway, check it out at
http://www.zipworld.com.au/~bhandley/rebol/
> Have fun :)
>
> Brett.
>
---------------------------
REBOL[
Author: "Brett Handley"
Date: 17-July-2000
Purpose: "Load and export tables stored as text using a
character as a column delimiter."
Comment: {Handles quoted strings. Returns a block of blocks.
Each row being a block of strings that represent
each cell.
Works under version 2.3 of core.
}
]
delimited-text-parser: make object! [
rows: none ; Internal variable
a-row: none ; Internal variable
cell-data: none ; Internal variable
data: none ; Internal variable
cell-delimiter: none
row-delimiter: "^/"
match-unquoted-data: none
initialise: func[][
match-unquoted-data: complement charset rejoin [cell-
delimiter {"} row-delimiter]
]
only-string: func[ s [any-string! none!] ][ either s [s][copy
{}]]
unquoted-data-pattern: [
copy cell-data some match-unquoted-data
]
quoted-data-pattern: [
(cell-data: copy {})
{"} copy data to {"} {"} (append cell-data only-string
data)
any [
{"} copy data to {"} {"} (append cell-data rejoin [{"}
only-string data])
]
]
data-pattern: [ [quoted-data-pattern | unquoted-data-
pattern ] ]
cell-pattern: [
[ [ cell-delimiter (cell-data: none)] | [data-pattern opt
cell-delimiter] ]
]
row-pattern: [
(a-row: make block! 1)
[
row-delimiter |
[
some [ cell-pattern (append a-row only-string cell-
data) ]
opt row-delimiter
]
]
]
delimited-text-pattern:[
(rows: make block! 10)
any [ row-pattern (append/only rows a-row)]
]
load-character-delimited: func[x [string!] /with a-char
[char!]] [
cell-delimiter: to-string either with [a-char][tab]
initialise
if not parse/all x delimited-text-pattern
[Print "Assumptions failed."]
rows
]
]
to-quoted-unquoted-string: function[x delimiter][do-special][
do-special: any [
find x delimiter
find x {"}
find x {'}
]
either do-special [
head insert append replace/all copy x {"} {""} {"} {"}
][
copy x
]
]
to-delimited: function[
x [block!]
delimiter [string!]
/table "Indicates that block is a table, seperate rows with
newline."
][result-string][
either table [
result-string: make string! 10000
if 0 < length? x [
append result-string to-delimited x/1 delimiter
]
for i 2 length? x 1 [
append result-string "^/"
append result-string to-delimited (pick x i) delimiter
]
result-string
][
result-string: make string! 10000
if 0 < length? x [
append result-string to-quoted-unquoted-string (x/1)
delimiter
]
for i 2 length? x 1 [
append result-string delimiter
append result-string to-quoted-unquoted-string (pick
x i) delimiter
]
result-string
]
]
to-character-delimited: func [
x [block!]
delimiter [string!]
][
either 0 < length? x [
either block? x/1 [
to-delimited/table x delimiter
][
to-delimited x delimiter
]
][
copy {}
]
]
load-tab-delimited: func[x [string!]][delimited-text-parser/load-
character-delimited x]
load-comma-delimited: func[x [string!]][delimited-text-
parser/load-character-delimited/with x #","]
export-tab-delimited: func [x [block!]][ to-character-delimited
x "^-"]
export-comma-delimited: func [x [block!]][ to-character-delimited
x ","]
Objevujte Internet s http://www.centrum.cz
Založte si svuj mail na http://mail.centrum.cz