s { set f 0; set r [list]; set a [list]; set e [list]; set i 0; foreach c [split $s ""] { switch -- $f { 0 { switch -- $c { \003 {set f 1;set b "\003"} \002 {lappend e [list $i \002]} \037 {lappend e [list $i \037]} \026 {lappend e [list $i \026]} \x1d {lappend e [list $i \x1d]} default {lappend a $c;incr i} } } 1 { switch -regexp -- $c { \d {append b $c;incr f} default {lappend e [list $i $b];lappend a $c;incr i;set f 0} } } 2 { switch -regexp -- $c { \d {append b $c;incr f} , {append b $c;set f 4} default {lappend e [list $i $b];lappend a $c;incr i;set f 0} } } 3 { switch -- $c { , {append b $c;incr f} default {lappend e [list $i $b];lappend a $c;incr i;set f 0} } } 4 { switch -regexp -- $c { \d {append b $c;incr f} default {lappend e [list $i $b];lappend a $c;incr i;set f 0} } } 5 { switch -regexp -- $c { \d {append b $c;lappend e [list $i $b];set f 0} default {lappend e [list $i $b];lappend a $c;incr i;set f 0} } } } } return [list $a $e] }