0

似たような他の言語を使用したことがありますが、私は Lua を初めて使用します。これまでのところ、大きなテキスト ファイルの解析に 8 時間を費やしましたが、無駄でした。

問題のファイルは次のようになります: (ただし、数千行の長さ)

A|KLAX|LOS ANGELES INTERNATIONAL|33942522|-118407161|125

ユーザーに KLAX 変数を入力してもらいましたが、私の目標は、テーブルを使用せずに問題の行のこの部分を取得することです。 33942522|-118407161

例えば

APTDEP_DATA = 33942522|-118407161

または、.txt ファイルから行全体を文字列として取得しますか?

例えば

APTDEP_DATA = A|KLAX|LOS ANGELES INTERNATIONAL|33942522|-118407161|125

事前に山ほど感謝します。8時間後、私がやろうとしていることが可能かどうかを知ることは素晴らしいことです. (私が見るすべてのチュートリアルは、データをテーブルに解析しています)

私はこの効果のために多くのことを試しました:

THE NZAA も私が見つけようとしていたコードです。KLAX と混同しないでください。結果を出そうとしただけです。

(コードを正しく表示できませんでした。リンクについて申し訳ありません)

4

2 に答える 2

4

サンプルスニペットを見ると、問題は次の使用法に起因しています。

AP_LAT = string.match(file, "A|NZAA")

パターン マッチングは、ハンドルではなく文字列値に対して実行されます。fileより適切なのは次のとおりです。

AP_LAT = string.match(line, "A|NZAA")

以下は、入力ファイルを一度に 1 行ずつ処理し、それぞれのフィールドに解析します。

file = assert(io.open("Airports.txt", "r"))

for line in file:lines() do
  local fields = { line:match "(%w+)|(%w+)|([%w ]+)|([%d-]+)|([%d-]+)|([%d-]+)" }
  -- do something useful with it
  print(fields[4], fields[5])  -- the 2 numeric fields you're interested in
end

file:close()

テーブルがないことに固執している場合は、次のように一致を変数にパントできます。

local first, second, third, etc = line:match "(%w+)|(%w+)|([%w ]+)|([%d-]+)|([%d-]+)|([%d-]+)"

注: 必要に応じてパターンを自由に変更/改良してください。これは、アイデアを説明するための単なる例です。

于 2013-07-23T07:11:24.620 に答える
0

ファイルから行を読み取るには、次を使用しますio.lines

for line in io.lines(filename) do 
    --do some processing
end

行から特定の部分を取得するには、パターン マッチングを使用します。質問から何を得ようとしているのかわかりません。

于 2013-07-23T06:06:28.770 に答える