2016-05-09 14 views
2

文字列全体にファイルを読み込む方法を探していました。私の現在のコード:ファイルを文字列ごとに読み込む

function readWholeFile(fn) 
    if(fn==nil) then 
    return nil 
    end 
    local file = io.open(fn, "r") 
    return file:read("*a") 
end 

私が欲しいこの関数の戻り値に

{'s', 'o', 'm', 'e', 't', 'e', 'x', 't'} 

代わりの

"Sometext" 

これを行うには、どのように?

答えて

3

ファイル全体を読み取り、内容文字列を文字に分割します。これは、stringライブラリで簡単に行うことができます。例えば:

for c in content:gmatch(".") do 

もう1つの可能な解決策:

file:readfile:read("*a")は、ファイル全体を読み込むための方法である、いくつかのフォーマットをサポートしています。代わりに、例えば1つの文字ごとに、読み取りにfile:read(1)を使用します。

パターンで動作しますgmatch
repeat 
    local c = file:read(1) 
    print(c) 
until c == nil 
+0

感謝です!これはうまくいく;]。 –

+1

新しいバージョンのLua(5.2+)では、 'io.lines()'と 'file:lines()'は 'file:read()'と同じ書式をサポートしていますので 'for file:lines(1)do。 .. end'もうまくいくはずです。 – siffiejoe

0

が、それは少しやり過ぎ私見に見えるが、あなたが必要とするすべてはstring.sub()

local text = readWholeFile("filename") 
local t = {} 
for i=1, #text do t[#t + 1] = text:sub(i,1) end 
関連する問題