Posted to tcl by jnc at Wed Nov 30 17:21:10 GMT 2011view raw

  1. proc edi::parse {args} {
  2. set terminator ~
  3. set separator *
  4. set subseparator :
  5.  
  6. foreach {a v} $args {
  7. switch -- $a {
  8. -filename { set fh [open $v r] ; set content [read $fh] ; close $fh }
  9. -string { set content $v }
  10. -terminator { set terminator $v }
  11. -separator { set separator $v }
  12. -subseparator { set subseparator $v }
  13. }
  14. }
  15.  
  16. foreach seg [split [regsub -all {[\n\r]} $content {}] $terminator] {
  17. set seg [string trim $seg]
  18. if {[string length $seg]==0} {
  19. continue
  20. }
  21.  
  22. set seg [split $seg $separator]
  23.  
  24. for {set i 0} {$i < [llength $seg]} {incr i} {
  25. set element [lindex $seg $i]
  26. if {[string first $subseparator $element] != -1} {
  27. lset seg $i [list SUB [split $element $subseparator]]
  28. }
  29. }
  30.  
  31. lappend segments $seg
  32. }
  33.  
  34. return $segments
  35. }