Перейти к основному содержимому

Замена содержимого диапазона строк (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