Как насчет этого?
lassign $line i s l t a c l n
Предполагая, что в вашей строке нет странной пунктуации (фигурные скобки и т. Д.), Большинство функций TCL, ожидающих аргумент списка, также будут принимать строку сэлементы разделяются пробелами и рассматриваются как список.Функция "lassign" берет каждый элемент в списке и присваивает его переменной.
Кроме того, я не знаю, хотели ли вы повторно использовать переменную "l".Я думаю, что и regexp, и lassign сохранят третий элемент в «l» и сразу же перезапишут его седьмым элементом в списке.