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 {lappend a $c; 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] }