LINUX.ORG.RU

Tcl, работа со строками в файле.


0

0

Здравствуйте.

Подскажите пожалуйста, как можно перезаписать извеcтную строку в файле?

Я делаю вот так, может надо по-другому?

#file:
#bump
#pmub

proc readFile {} {
    set fl [open "[pwd]/file"]
    set data [read $fl]
    close $fl
    writeFile $data
}

proc writeFile {data} {
    set data [lreplace $data 0 0 foo]
    set fl [open "[pwd]/file" w+]
    foreach w $data {
        puts $fl $w
    }
    flush $fl
    close $fl
    exit
}
readFile

anonymous

Re: Tcl, работа со строками в файле.

exec awk { { if (NR == 3) print "NewString"; else print $0 } } inFile > tempFile
file rename -force tempFile inFile

;)

naryl ★★★★★ ()
Ответ на: Re: Tcl, работа со строками в файле. от anonymous

Re: Tcl, работа со строками в файле.

Если номер текущей записи(строки) равен 3, то вывести NewString, иначе вывести текущую строку.

Просто один из вариантов. За кошерным решением ждём более опытных тиклеров.

naryl ★★★★★ ()
Ответ на: Re: Tcl, работа со строками в файле. от Jini

Re: Tcl, работа со строками в файле.

Благодарю. Топикстартеру - похоже это самое простое и понятное решение.
exec sed -i 3cNewString inFile

naryl ★★★★★ ()

Re: Tcl, работа со строками в файле.

Нет ничего плохого в использовании утилит из tcl. Я на нём иногда скрипты пишу.

naryl ★★★★★ ()

Re: Tcl, работа со строками в файле.

Читать строки принято с помощью gets

> foreach w $data {


Создай файл с содержимым:
a
b
c d e
и посмотри, во что он превратится.

А потом создай файл с содержимым:
a
b {
c
и слови ошибку "unmatched open brace in list"

А потом прочитай повнимательнее первую главу из любой книжки по tcl, где рассказывается про работу парсера.

Правильное решение для разбивки по строкам: foreach line [ split $data \n ] {...}

gaa ★★ ()
Ответ на: Re: Tcl, работа со строками в файле. от gaa

Re: Tcl, работа со строками в файле.

Да, конечно, неправильно/не универсально написал. Обычно я так и нарезаю содержимое файла/stdout.

Виноват.

Просто у меня вроде как конфигурационный, например, файл, в котором в строке нет ни пробелов, ни специальных знаков.

И я хочу заменить любую известную строку в нём другой или изменить её.

Мой вариант для меня работает, но расстраивает, что файл сначала открывается для чтения, а потом для перезаписи.

Может есть способ для установки "указателя" в файле на требуемую строку для её перезаписи?

anonymous ()
Ответ на: Re: Tcl, работа со строками в файле. от naryl

Re: Tcl, работа со строками в файле.

Спасибо за варианты, но я просто хочу делать это из tcl.

Просто результат - это ещё не всё :)

anonymous ()
Ответ на: Re: Tcl, работа со строками в файле. от anonymous

Re: Tcl, работа со строками в файле.

> Может есть способ для установки "указателя" в файле на требуемую строку для её перезаписи?

man 3tcl seek. Но учти, оно работает в режиме перезаписи, т.е. заменить "blah" на "blahblahblah" таким образом не выйдет.

gaa ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.