Zeilenbereich ersetzen (LCC.web_file.set_range_lines)
Deklaration
ok, replaced_or_err = LCC.web_file.set_range_lines(path, start_line, lines, timeout?)
Parameter
- path
String. Dateipfad. - start_line
Zahl. Startindex der Zeile; positive Zahlen beginnen bei1, negative Werte zählen vom Ende (-1ist die letzte Zeile), und0bedeutet hinter dem Ende. - lines
Tabelle. Array der neuen Zeilenzeichenketten. - timeout
Zahl, optional. Anfrage-Timeout in Sekunden, Standard60.
Rückgabewerte
- ok
Boolean. Bei Erfolgtrue, bei Fehlerfalse. - replaced_or_err
Tabelle oder String. Bei Erfolg die ersetzten ursprünglichen Zeilen, bei Fehler die Fehlerbeschreibung.
Hinweise
Überschreibt ab der angegebenen Position mehrere Zeilen auf einmal.
Jeder leere String im Array steht für eine Leerzeile, auch am Ende; beispielsweise ersetzt{"Neuer Inhalt", ""}zwei Zeilen.
Ein leeres Array{}enthält keine Ersatzzeilen und unterscheidet sich von einem Array mit einem leeren String{""}.
Die Regeln für Zeilennummern finden Sie in der obigen Parameterbeschreibung.
Wenn die Zielposition hinter dem aktuellen Ende liegt, werden automatisch Leerzeilen eingefügt.
Gibt{}zurück, wenn keine vorhandenen Zeilen ersetzt wurden.
Der zurückgegebene alte Inhalt eignet sich für Protokollierung oder Rückgängig-Vorgänge.
Lesen und Schreiben kombinieren
Wenn eine Datei mit einem Zeilenumbruch endet, behält get_lines den beim Aufteilen am Ende entstehenden leeren String bei. Beispielsweise liefert der zweizeilige Text "A\nB\n" das Array {"A", "B", ""}. Wird dieses Array an set_range_lines(path, 1, lines) übergeben, werden drei Zeilen geschrieben, von denen die letzte leer ist.
Um Inhalte anhand von Zeilennummern zu lesen und zu ersetzen, kombinieren Sie get_range_lines mit set_range_lines. Um die gesamte Datei zu lesen, zu ändern und zu überschreiben, kombinieren Sie get_lines mit set_lines. set_lines überschreibt die gesamte Datei und eignet sich nicht für teilweise Ersetzungen.
Bei beiden Kombinationen sind Lesen und Schreiben getrennte Anfragen. Der gesamte Ablauf aus Lesen, Ändern und Zurückschreiben ist daher nicht atomar. Koordinieren Sie bei gleichzeitigen Schreibzugriffen den Zugriff, damit Änderungen nach dem Lesen nicht überschrieben werden.
Beispiel
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