2016-01-27 2 views
1

позволяет сказать, что я открываю файл, а затем разбирает его в строках. Затем я использую цикл:TCL, заменяя строки в текстовом файле

foreach line $lines {} 

например, если файл содержал следующую строку:

 
XYDATA, NAME1 

Я хочу поставить ACC_ после XYDATA получить ACC_NAME1 и если файл содержит более одного строки с XYDATA, положить VEL_, DSP_ и Prs_ и так далее

ответ

1

Использование textutil::split пакета из tcllib и способность foreach перебрать несколько списков одновременно

package require textutil::split 

set line {XYDATA, foo, bar, baz, qux} 
set prefixes {ACC_ VEL_ DSP_ Prs_} 

set fields [textutil::split::splitx $line {, }] 
set new [list] 

if {[lindex $fields 0] eq "XYDATA"} { 
    lappend new [lindex $fields 0] 
    foreach prefix $prefixes field [lrange $fields 1 end] { 
     lappend new $prefix$field 
    } 
} 
puts [join $new ", "] 
XYDATA, ACC_foo, VEL_bar, DSP_baz, Prs_qux 

попеременно использовать один вызов regsub, который генерирует некоторый код

set code [regsub -all {(,)([^,]+)} $line {\1[lindex $prefixes [incr counter]]\2}] 
set counter -1 
puts [subst $code] 
+0

Regular 'split' будет работать слишком , оставляя запятые в конце полей. –

+1

Я думал, что в полях могут быть дополнительные пробелы. –

Смежные вопросы