Substituir o conteúdo de um intervalo de linhas (LCC.web_file.set_range_lines)
Declaração
ok, replaced_or_err = LCC.web_file.set_range_lines(path, start_line, lines, timeout?)
Parâmetros
- path
Tipo string; caminho do arquivo de destino - start_line
Tipo number; linha inicial; números positivos começam em1, números negativos contam do fim (-1é a última linha) e0indica depois da última linha - lines
Tipo table; array de linhas do novo conteúdo - timeout
Tipo number, opcional; tempo limite da solicitação (em segundos), padrão60
Valor de retorno
- ok
Tipo boolean; retornatruequando tem sucesso efalsequando falha - replaced_or_err
Tipo table ou string; em caso de sucesso, array com o conteúdo original das linhas substituídas; em caso de falha, descrição do erro
Descrição
Substitui várias linhas de texto na posição especificada.
Cada string vazia do array representa uma linha vazia, inclusive no final; por exemplo,{"Novo conteúdo", ""}substitui duas linhas.
Um array vazio{}não contém linhas de substituição e é diferente de um array com uma string vazia,{""}.
Consulte a descrição dos parâmetros acima para as regras de numeração.
Quando a linha inicial excede o número atual de linhas, linhas vazias são adicionadas automaticamente no meio.
Quando tem sucesso mas não substitui nenhuma linha existente, retorna uma table vazia{}.
O conteúdo antigo retornado pode ser usado para registrar ou reverter a operação.
Combinar leituras e escritas
Quando um arquivo termina com uma quebra de linha, get_lines preserva a string vazia produzida pela divisão no final. Por exemplo, o texto de duas linhas "A\nB\n" retorna {"A", "B", ""}; passar esse array para set_range_lines(path, 1, lines) grava três linhas, sendo a última vazia.
Para ler e substituir conteúdo por número de linha, combine get_range_lines com set_range_lines. Para ler, modificar e sobrescrever o arquivo inteiro, combine get_lines com set_lines. set_lines sobrescreve o arquivo inteiro e não é adequado para substituições parciais.
Nas duas combinações, a leitura e a escrita são requisições independentes, portanto a sequência completa de leitura, modificação e escrita não é atômica. Se houver escritas concorrentes, coordene o acesso para evitar sobrescrever alterações feitas após a leitura.
Exemplo
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