指定した行範囲の内容を置換する (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
テーブルまたは文字列。成功時は置換された元の行内容の配列、失敗時はエラー説明を返します
説明
指定位置で複数行のテキストを上書きします。
配列内の空文字列は空行を表し、末尾の空文字列も書き込まれます。例えば、{"新しい内容", ""}は 2 行を置換します。
空配列{}は置換する行を含まず、空文字列を 1 つ含む配列{""}とは異なります。
行番号の規則については、上記の引数説明を参照してください。
開始行番号が現在の行数を超える場合は、間に空行を自動的に補います。
成功したものの既存の行を上書きしなかった場合は、空のテーブル{}を返します。
返された元の内容は、記録やロールバックに利用できます。
読み取りと書き込みの組み合わせ
ファイルが改行で終わる場合、get_lines は末尾の分割で生じた空文字列を保持します。例えば、2 行のテキスト "A\nB\n" は {"A", "B", ""} を返します。この配列を set_range_lines(path, 1, lines) に渡すと、末尾の空行を含む 3 行が書き込まれます。
行番号を指定して内容を読み取り、置換する場合は、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