Posted to tcl by jnc at Wed Nov 30 17:21:10 GMT 2011view raw
- proc edi::parse {args} {
- set terminator ~
- set separator *
- set subseparator :
-
- foreach {a v} $args {
- switch -- $a {
- -filename { set fh [open $v r] ; set content [read $fh] ; close $fh }
- -string { set content $v }
- -terminator { set terminator $v }
- -separator { set separator $v }
- -subseparator { set subseparator $v }
- }
- }
-
- foreach seg [split [regsub -all {[\n\r]} $content {}] $terminator] {
- set seg [string trim $seg]
- if {[string length $seg]==0} {
- continue
- }
-
- set seg [split $seg $separator]
-
- for {set i 0} {$i < [llength $seg]} {incr i} {
- set element [lindex $seg $i]
- if {[string first $subseparator $element] != -1} {
- lset seg $i [list SUB [split $element $subseparator]]
- }
- }
-
- lappend segments $seg
- }
-
- return $segments
- }