2016-08-10 4 views
3

私はこれに対する答えを探していて、誰もが答える答えは常に1行ずつですが、私のファイルはすべて1行の文字だけで、io.open( "file.txt" "rb"):read( "* a")はメモリエラーを引き起こします。私が言ったように、一度にそれをロードする方法を考えることができません、そのすべての1つの巨大なライン。ルアで大きなファイル(ギグ以上)を読むにはどうしたらいいですか?

+2

をどのように '使用について:(4096)を読んで、'または類似の固定サイズのチャンクで読み取るために? – Amadan

+0

これは基本的にstring.subと同じ働きをしますが、もし私が必要としていたものなら、ファイルを読み込むためのものです。 – 128Gigabytes

+0

同じではなく、それ自体が順番に読み取ります。 ':seek(" set "、start)'と並行して作業すると、文字列に '.sub'を付けて実行するファイルと同じことができます。 – Amadan

答えて

2

io.read(size)を使用すると、指定されたサイズのバッファを読み取ることができます(コメントですでに説明したとおりです)。 example at the end of the I/O sectionProgramming in Lua)を参照してください。

読み込んだチャンクで検索を行っているため、検索している文字列が異なるチャンクに分割されている可能性があります。 Another example from PiL that talks about reading large filesが興味深いかもしれません。

0

あなたはバッファとして、テーブルを使用することができます。

function readFile(file) 
local t = {} 
for line in io.lines(file) do 
    t[#t + 1] = line .. "\n" 
end 
    local s = table.concat(t) 
    return s 
end 
+0

これは 'file:read(" * a ") 。 – siffiejoe

関連する問題