Замена содержимого диапазона строк (LCC.web_file.set_range_lines)
Сигнатура
ok, replaced_or_err = LCC.web_file.set_range_lines(path, start_line, lines, timeout?)
Параметры
- path
Строка, путь целевого файла - start_line
Число, номер начальной строки; положительные номера отсчитываются от1, отрицательные — с конца (-1— последняя строка),0— после последней строки - lines
Таблица, массив строк нового содержимого - timeout
Число, необязательный тайм-аут запроса (секунды), по умолчанию60
Возвращаемое значение
- ok
Логическое значение: при успехеtrue, при сбоеfalse - replaced_or_err
Таблица или строка; при успехе массив заменённых исходных строк, при сбое описание ошибки
Описание
Перезаписывает несколько строк в указанной позиции.
Пустые строки в массиве, в том числе в конце, записываются как пустые строки файла; например,{"Новое содержимое", ""}заменяет две строки.
Пустой массив{}не содержит строк для замены и отличается от массива с одной пустой строкой{""}.
Правила нумерации строк см. в описании параметров выше.
Если начальный номер превышает число существующих строк, недостающие строки между ними добавляются автоматически.
При успешной операции без перезаписи существующих строк возвращается пустая таблица{}.
Возвращённое старое содержимое можно использовать для журнала или отката.
Сочетание чтения и записи
Если файл заканчивается переводом строки, get_lines сохраняет пустую строку, полученную при разбиении в конце. Например, текст из двух строк "A\nB\n" возвращает {"A", "B", ""}; передача этого массива в set_range_lines(path, 1, lines) записывает три строки, последняя из которых пустая.
Чтобы читать и заменять содержимое по номерам строк, используйте get_range_lines вместе с set_range_lines. Чтобы прочитать, изменить и перезаписать весь файл, используйте get_lines вместе с set_lines. set_lines перезаписывает файл целиком и не подходит для частичной замены.
В обоих сочетаниях чтение и запись выполняются отдельными запросами, поэтому весь цикл чтения, изменения и записи не является атомарным. При одновременной записи необходимо координировать доступ, чтобы не перезаписать изменения, сделанные после чтения.
Пример
local ok, old_lines_or_err = LCC.web_file.set_range_lines("/配置/list.txt", 2, {"Beta", "Gamma"})
if ok then
print("原内容:", table.concat(old_lines_or_err, ","))
end