2016-03-20 10 views
1

Luaでファイルの最初の行にテキストを追加するにはどうすればよいですか?Luaでファイルの最初の行にテキストを追加

out = io.open('file.txt}','a') 
out:write('Hello world. ') 
out:write('This is different') 
io.close(out) 

私は上記のコードを使用してファイルにコンテンツを追加する方法のみを知っています。

+0

1:「fule」とは何ですか? 2:何か他のものの前面に何かを "追加"することはできません。定義上、「追加」は最後に追加することを意味します。 –

+0

@ニコルボラス私は知っている、これを行うには他の方法ですか? – Sergio

答えて

1

ファイルの最初の行にテキストを追加することができます。

-- Open the file in r mode (don't modify file, just read) 
local out = io.open('file.txt', 'r') 

-- Fetch all lines and add them to a table 
local lines = {} 
for line in f:lines() do 
    table.insert(lines, line) 
end 

-- Close the file so that we can open it in a different mode 
out:close() 

-- Insert what we want to write to the first line into the table 
table.insert(lines, 1, "<what you want to write to the first line>\n") 

-- Open temporary file in w mode (write data) 
-- Iterate through the lines table and write each line to the file 
local out = io.open('file.tmp.txt', 'w') 
for _, line in ipairs(lines) do 
    out:write(line) 
end 
out:close() 

-- At this point, we should have successfully written the data to the temporary file 

-- Delete the old file 
os.remove('file.txt') 

-- Rename the new file 
os.rename('file.tmp.txt', 'file.txt') 

これが役立つことが期待されます。あなたが望むようにうまくいかない場合は、教えてください。

詳細は、IOライブラリの素晴らしいドキュメントを参照してください。 http://lua-users.org/wiki/IoLibraryTutorial

+0

私はこれをお勧めしません。書き込みプロセス中にプログラムがクラッシュした場合、データは破損します。バックアップせずにファイルを揮発性メモリから上書きしないでください! – Piglet

+0

@ピグレット私はこの問題を私が直した最新の編集で解決したと信じています。 – Programmix

+1

コードは機能しますが、あまり効率的ではありません。 Luaテーブルは内部配列を使用しているため、最初の行を他の行の後に挿入すると、他のすべての行を上に移動する必要があります。さらに、ブロックサイズが許されるときに行を読むことは、最良の選択ではありません。安価な操作のために固定数のバイトを読み取ろうとします。 – Youka

2

新しいファイルを作成して、あなたのものを挿入します。次に、古いファイルの内容を追加します。完了したら、古いファイルを新しいファイルで置き換えます。

一般的なファイルの前に挿入(または挿入)しません。それは全体のコンセプトの中で意味をなさない。ファイルデータをクラスタに保存します。彼らはスタートと所定のサイズを持っています。 そのためのプログラミング言語はほとんどありません。

1つのファイルがバケット(クラスタ)に保存されているとします。水はデータを表します。 1つのバケットを下から上に塗りつぶします。その後、2番目のように。ファイルに何かを追加するときは、最後のバケツに水を加えます。満杯の場合は別のバケツを追加し、上から下に記入してください。

今、ファイルの半分のサイズのバケットを前に追加してみてください。最初のバケットがいっぱいになっているので、バケットを行の前に追加します。新しいバケツを上から上に塗りつぶすことはできますか? No. 下から中に書き込むことができます。しかし、今はあなたのファイルにバケツの半分のギャップがあります。

それは何とかそのように動作します。私はもっ​​と良い例を考えることはできません。

関連する問題