Saltar al contenido principal

Sustituir el contenido de un intervalo de líneas (LCC.web_file.set_range_lines)

Declaración​

ok, replaced_or_err = LCC.web_file.set_range_lines(path, start_line, lines, timeout?)

Parámetros​

  • path
    Tipo string; ruta del archivo de destino
  • start_line
    Tipo numérico; número de línea inicial; los positivos comienzan en 1, los negativos cuentan desde el final (-1 es la última línea) y 0 indica después de la última línea
  • lines
    Tipo table; array de líneas de contenido nuevo
  • timeout
    Tipo numérico, opcional; tiempo de espera de la solicitud (segundos), predeterminado 60

Valores devueltos​

  • ok
    Tipo booleano; devuelve true si tiene éxito y false si falla
  • replaced_or_err
    Tipo table o string; si tiene éxito, devuelve el array de contenido de las líneas originales sustituidas; si falla, devuelve la descripción del error

Descripción​

Sobrescribe varias líneas en la posición indicada.
Cada cadena vacía del array representa una línea vacía, también al final; por ejemplo, {"Contenido nuevo", ""} sustituye dos líneas.
El array vacío {} no contiene líneas de sustitución y es distinto de un array con una cadena vacía, {""}.
Consulta la descripción de los parámetros anterior para conocer las reglas de numeración.
Si el número de línea inicial supera el contenido existente, se añaden automáticamente líneas vacías intermedias.
Si tiene éxito pero no sobrescribe ninguna línea existente, devuelve un array vacío {}.
El contenido anterior devuelto puede utilizarse para registrar la operación o revertirla.

Combinar lecturas y escrituras​

Cuando un archivo termina con un salto de línea, get_lines conserva la cadena vacía que resulta de la división al final. Por ejemplo, el texto de dos líneas "A\nB\n" devuelve {"A", "B", ""}; al pasar este array a set_range_lines(path, 1, lines), se escriben tres líneas, con la última vacía.

Para leer y sustituir contenido por número de línea, combina get_range_lines con set_range_lines. Para leer, modificar y sobrescribir todo el archivo, combina get_lines con set_lines. set_lines sobrescribe el archivo entero y no es adecuado para sustituciones parciales.

En ambas combinaciones, la lectura y la escritura son peticiones independientes, por lo que la secuencia completa de lectura, modificación y escritura no es atómica. Si hay escrituras concurrentes, coordina el acceso para evitar sobrescribir cambios realizados después de la lectura.

Ejemplo​

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