Ir para o conteúdo principal

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 em 1, números negativos contam do fim (-1 é a última linha) e 0 indica 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ão 60

Valor de retorno​

  • ok
    Tipo boolean; retorna true quando tem sucesso e false quando 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