nick t3gwtg35h e4gegwww4
nick2 g33g3g4h hwsh4wh5
nick3 erygh34y4 5y4h45j
1. Чтение всех строк из файла в список.
Это одна из самых основных операций при работе с файлами, которая используется в очень многих случаях, ознакомьтесь внимательно с ней!
# Имя файла который будем читать.
set fname "yourfile.txt"
# Открываем доступ к файлу для чтения (мы не ловим ошибки, однако
# можно использовать catch {} в случае если файл отсутствует.
set fp [open $fname "r"]
# Тут мы считываем все данные из файла.
set data [read -nonewline $fp]
# Закрываем файл.
close $fp
# Теперь разбиваем данные на отдельные строки.
set lines [split $data "\n"]
set fname "yourfile.txt"
# Открываем доступ к файлу для чтения (мы не ловим ошибки, однако
# можно использовать catch {} в случае если файл отсутствует.
set fp [open $fname "r"]
# Тут мы считываем все данные из файла.
set data [read -nonewline $fp]
# Закрываем файл.
close $fp
# Теперь разбиваем данные на отдельные строки.
set lines [split $data "\n"]
Теперь у нас в переменной lines все строки из файла, далее смотрим другие операции с файлами.
2. Чтение случайной строки из файла (маленького).
существует множество причин для использования этого, скрипт цитат, случайных топиков. В данном примере расмотрим выбор одной строки, но вы можете легко выбирать и несколько строк из разных частей файла.
# Используйте код из примера (1.) для чтения всех строк из файла.
# Мы продолжаем сразу после: set lines [split $data "\n"]
# получаем количество строк в файле.
set numlines [llength $lines]
# Выбираем номер случайной строки используя функцию rand.
set num [rand $numlines]
# Забираем эту строку!
set randline [lindex $lines $num]
# Мы продолжаем сразу после: set lines [split $data "\n"]
# получаем количество строк в файле.
set numlines [llength $lines]
# Выбираем номер случайной строки используя функцию rand.
set num [rand $numlines]
# Забираем эту строку!
set randline [lindex $lines $num]
Теперь в переменной $randline у нас находится случайная строка. Если вы хотите получить несколько строк запустите последнюю часть года в цикле.
3. Удаление строки из файла.
Вам може понадобиться удалить строку из файла. Запомните что во многих языках, включая TCL номера элементов начинаются с 0. То-есть, чтобы удалить первую строку вам надо удалить строку с индексом 0, чтобы удалить вторую, с индексом 1. И так далее.
# Используйте код из примера (1.) для чтения всех строк из файла.
# Мы продолжаем сразу после: set lines [split $data "\n"]
# Удаляем первую строку.
set line_to_delete 0
# Если хотите удалить последнюю строку то используйте:
# set line_to_delete [expr {[llength $lines] - 1}]
# Теперь удаляем строку из списка в памяти.
proc K {x y} { set x }
set lines [lreplace [K $lines [set lines {}]] $line_to_delete $line_to_delete]
# И наконец, перезаписываем файл с новыми данными.
set fp [open $fname "w"]
puts $fp [join $lines "\n"]
close $fp
# Мы продолжаем сразу после: set lines [split $data "\n"]
# Удаляем первую строку.
set line_to_delete 0
# Если хотите удалить последнюю строку то используйте:
# set line_to_delete [expr {[llength $lines] - 1}]
# Теперь удаляем строку из списка в памяти.
proc K {x y} { set x }
set lines [lreplace [K $lines [set lines {}]] $line_to_delete $line_to_delete]
# И наконец, перезаписываем файл с новыми данными.
set fp [open $fname "w"]
puts $fp [join $lines "\n"]
close $fp
Как вы видите, для того, чтобы удалить строку из фала, сначала мы должны считать файл в память, удалить строку в памяти и затем переписать данные из памяти в файл. Если вы часто используете удаление и добавление строк лучше использовать базы данных. Также если файл с которы вы работаете очень большой (несколько мегабайт) эти операции будут занимать определенное время.
4. Добавление строки в файл.
Обычно строки добавляют в начало или в конец файла. В примере ниже рассмотрим последний вариант.
# Используйте код из примера (1.) для чтения всех строк из файла.
# Мы продолжаем сразу после: set lines [split $data "\n"]
# Для добавления в начало используйте индекс строки 0, так как счет начинается с 0.
# Если хотите добавить строку в конец файла смотрите следующий пример.
set line_to_insert "это новая строка"
set where_to_insert end
# Добавляем эту строку с список находящийся в памяти.
set lines [linsert $lines $where_to_insert $line_to_insert]
# И переписываем файл с новыми данными как в примере (3.).
set fp [open $fp "w"]
puts $fp [join $lines "\n"]
close $fp
# Мы продолжаем сразу после: set lines [split $data "\n"]
# Для добавления в начало используйте индекс строки 0, так как счет начинается с 0.
# Если хотите добавить строку в конец файла смотрите следующий пример.
set line_to_insert "это новая строка"
set where_to_insert end
# Добавляем эту строку с список находящийся в памяти.
set lines [linsert $lines $where_to_insert $line_to_insert]
# И переписываем файл с новыми данными как в примере (3.).
set fp [open $fp "w"]
puts $fp [join $lines "\n"]
close $fp
5. Добавление строки в конец файла.
Для добавления стоки в конец файла не обязательно считывать и перезаписывать файл полностью. Мы будем открывать файл в режиме "append mode".
# Новая строка.
set line_to_add "это новая строка"
# Файл куда мы будем ее добавлять.
set fname "yourfile.txt"
# Открываем файл в append mode.
set fp [open $fname "a"]
# Добавляем строку.
puts $fp $line_to_add
# Все готово!
close $fp
set line_to_add "это новая строка"
# Файл куда мы будем ее добавлять.
set fname "yourfile.txt"
# Открываем файл в append mode.
set fp [open $fname "a"]
# Добавляем строку.
puts $fp $line_to_add
# Все готово!
close $fp
Вольный перевод поста http://forum.egghelp.org/viewtopic.php?t=6885