6

ファイルを Lua の変数にロードする必要があります。

私が得たとしましょう

name address email

それぞれの間にスペースがあります。ある種のオブジェクトにロードするために、そのような行がx行あるテキストファイルが必要です-または、少なくとも1行を、スペースで区切られた文字列の配列にカットする必要があります。

この種の仕事は Lua で可能ですか?どうすればよいですか? 私は Lua にかなり慣れていませんが、インターネット上で関連するものを見つけることができませんでした。

4

3 に答える 3

11

文字列ライブラリの一部であるLuaパターンについて読みたいと思います。関数の例を次に示します(テストされていません)。

function read_addresses(filename)
  local database = { }
  for l in io.lines(filename) do
    local n, a, e = l:match '(%S+)%s+(%S+)%s+(%S+)'
    table.insert(database, { name = n, address = a, email = e })
  end
  return database
end

%Sこの関数は、スペース以外の( )文字で構成される3つのサブストリングを取得するだけです。実際の関数には、パターンが実際に一致することを確認するためのエラーチェックがあります。

于 2009-12-12T01:13:31.880 に答える
9

urocの答えを拡張するには:

local file = io.open("filename.txt")
if file then
    for line in file:lines() do
        local name, address, email = unpack(line:split(" ")) --unpack turns a table like the one given (if you use the recommended version) into a bunch of separate variables
        --do something with that data
    end
else
end
--you'll need a split method, i recommend the python-like version at http://lua-users.org/wiki/SplitJoin
--not providing here because of possible license issues

ただし、名前にスペースが含まれている場合はカバーされません。

于 2009-12-12T00:55:34.310 に答える
3

入力ファイルの形式を制御できる場合は、こちらで説明されているように、Lua 形式でデータを保存することをお勧めします。

そうでない場合は、io ライブラリを使用してファイルを開き、次のような文字列ライブラリを使用します。

local f = io.open("foo.txt")
while 1 do
    local l = f:read()
    if not l then break end
    print(l) -- use the string library to split the string
end
于 2009-12-12T00:34:22.417 に答える