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
Ответ на: комментарий от naryl

/me посыпает пеплом голову (
Я awk знаю на уровне "вывести элемент списка".
Да и не кошерно, нет?

anonymous
()
Ответ на: комментарий от anonymous

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

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

naryl ★★★★★
()
Ответ на: комментарий от Jini

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

naryl ★★★★★
()

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

naryl ★★★★★
()

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

> foreach w $data {


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

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

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

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

gaa ★★
()
Ответ на: комментарий от gaa

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

Виноват.

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

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

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

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

anonymous
()
Ответ на: комментарий от naryl

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

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

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