2017-12-07 3 views
0

私がコマンドを書くとき、結果は1以下です。私はどのようにipairsから値を抽出できますか?

No ID   Sub-Id    Sig Mode 
22 DarrenIm 00:00:00:1a:00  60  13n/d 
32 DarrenYou 00:00:00:1b:01  80  13n/d 

私は、SIGの値を抽出したい(とSIGの値を比較するから、私は最高のシグ値を取得したいと同じ列にIDを取得したいです)。私はそれを試みたが問題がある。 ここに私のコードです。

f = assert(io.popen("Here is my command")) 

local val = {} 

for line in f:lines() do 
    print(line) 
    for v in line:gmatch'[%d]%d' do 
      table.insert(val, v) 
    end 

    for i, v in ipairs(val) do 
      m = math.max(i) 
      n = m-1 
      sig = v 
      print(sig) 
    end 

print(n) 

end 

f:close() 

しかし、私がsig [n]を使用した場合、エラーがあるため、値を抽出できません。 そして、その値を比較することから、私は最高のシグナルを得て、同じ列にIDを取得したいと思います。 この問題を解決するにはどうすればよいですか?

+0

解決策は、入力文字列を解析することです。たとえば、関数をここから取得してください。https://stackoverflow.com/questions/47655213/print-table-in-lua –

+0

ありがとう、私はそれをチェックします。 – darren

答えて

2

あなたのコードを見てみましょう。まず、あなたはあなたがそれぞれに'[%d]%d'ごとに試合を挿入

for line in f:lines() do 
    print(line) 

それを印刷し、あなたはあなたが行毎にファイルを読み込むテーブル

local val = {} 

を作成し、ファイルが

f = assert(io.popen("Here is my command")) 

を扱う取得しますあなたのテーブルに一列に並んでください。val

for v in line:gmatch'[%d]%d' do 
      table.insert(val, v) 
    end 

これで、ファイルのすべての行をvalに解析した後に意味をなすことができるようになりました。しかしこれは、あなたがラインループの中にいても、各ラインに対して行われます。

for i, v in ipairs(val) do 

iは1つの数値の最大値は何ですか?この行はナンセンスです。

  m = math.max(i) 
      n = m-1 

sigはグローバル変数です。あなたの場合は文字列です。 sig [n]はテーブルの値だけをインデックスできるので、もちろんあなたにエラーを与えます。

  sig = v 
      print(sig) 
    end 

print(n) 

end 

f:close() 

文字列パターン '[%d]'があまり意味がありません。 []は文字のクラスを作成します。 %dは任意の数を表します。それだけをクラスに入れても、%dを使うだけの違いはありません。

あなたのコードは、Luaの基本的な知識が不足していることを示しています。ファイルを解析しようとする初心者のためのチュートリアルをしてください。

コードの構造は、操作の順序について実際には考えていないことを示しています。ペンと紙を手に入れ、プログラミングを始めると思う。

+0

私もそうだと思います。私は自分の問題についてもっと考え、また勉強するつもりです。あなたのコメントありがとう。 – darren

関連する問題