Чтение и перезапись определенных строк в TCL

#tcl

#tcl

Вопрос:

Дорогие, у меня есть следующая информация (x y z) в файле «data.dat»:

 24.441 53.481 41.474
23.920 53.389 42.572
24.470 52.228 42.012
24.875 51.313 42.524
23.663 51.323 42.701
  

Мне требуется переписать информацию следующим образом:

 {24.441 53.481 41.474} {23.920 53.389 42.572}
{23.920 53.389 42.572} {24.470 52.228 42.012}
{24.470 52.228 42.012} {24.875 51.313 42.524}
{24.875 51.313 42.524} {23.663 51.323 42.701}
  

Это для большого файла данных. Как я мог бы сделать это в TCL. Заранее спасибо за помощь.

Ответ №1:

 set infile  "data.dat"
set outfile [file tempfile]

set in  [open $infile r]
set out [open $outfile w]

gets $in prev_line
while {[gets $in line] != -1} {
    puts $out [format "{%s} {%s}" $prev_line $line]
    set prev_line $line
}

close $in
close $out

# remove next line if you don't need to keep a backup of the initial file
file link -hard "${infile}.bak" $infile

# and overwrite the original file with the new contents
file rename -force $outfile $infile
  

или вызовите GNU awk, чтобы сделать это

 exec gawk -i inplace {
    NR == 1 {prev = $0; next}
    {printf "{%s} {%s}n", prev, $0; prev = $0}
} data.dat
  

Комментарии:

1. Вы можете задаться вопросом, можете ли вы редактировать данные на месте. Технически да, но это опасно (с любым языком программирования), если данные изменяют длину любой строки. Намного проще корректно выполнить запись в отдельный файл.