REBOL [ Title: "CSV-Protocol" File: %csv-protocol.r Author: "Jean Holzammer" Owner: "Jean Holzammer" Home: http://www.holzammer.net Date: 23-Jun-2001 Version: 0.1 Rights: "$VER: csv-protocol.r 0.1 (23.06.2001) (17:04:00) ©2001 Jean Holzammer (Development@Holzammer.net)" Purpose: {Adds a csv:// protocol to rebol for access to ascii database files with columns separated by comma} History: [ 0.1 [23-Jun-2001 "First implementation" "Jean Holzammer"] ] Language: "English" Note: "Have a look into the readme !" ] make root-protocol [ filename: "" data1: [] data2: [] modified?: false separator: "," port-flags: system/standard/port-flags/pass-thru open: func [port] [ ;print "OPEN" if not none? port/path [filename: join filename port/path] filename: to-file join filename port/target data1: system/words/read filename data1: parse data1 "^(line)" foreach row data1 [ data2: append/only data2 parse row separator ] clear data1 port/state/tail: length? data2 port/state/index: 0 port/state/flags: port/state/flags or port-flags ] copy: func [port] [ ;print "COPY" system/words/copy data2 ] insert: func [port data] [ data2: append/only data2 data modified?: true "OK" ] ;read: func [port] ; [ ; print "READ" ; ] close: func [port /local data-to-save] [ ;print "CLOSE" data-to-save: "" if modified? [ foreach row data2 [ for i 1 ((length? row) - 1) 1 [ data-to-save: append data-to-save join system/words/pick row i separator ] data-to-save: append data-to-save join last row newline ] system/words/write filename data-to-save ] modified?: false clear filename clear data2 clear data-to-save ] pick: func [port] [ system/words/copy system/words/pick data2 (port/state/index + 1) ] net-utils/net-install csv self 0 ]