2017-12-07 6 views
0

Wenn ich den Befehl schreibe, ist das Ergebnis unter eins.Wie kann ich den Wert von ipairs extrahieren?

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 

Ich mag den Sig-Wert extrahieren (und die sig Werte aus dem Vergleich, ich will höchsten Sig Wert erhalten und will ID in derselben Spalte zu bekommen). Ich habe es versucht, aber ich habe ein Problem. Hier ist mein Code.

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() 

Wenn ich jedoch sig [n] verwendet, gibt es einen Fehler, daher kann ich den Wert nicht extrahieren. Und aus dem Vergleich dieser Werte möchte ich das höchste Signal erhalten und Id in derselben Spalte bekommen. Wie kann ich dieses Problem lösen?

+0

Eine Lösung wäre, die Eingabezeichenfolge zu analysieren. Nehmen Sie zum Beispiel die Funktion von hier https://stackoverflow.com/questions/47655213/print-table-in-lua –

+0

Danke, ich werde es überprüfen. – darren

Antwort

2

Werfen wir einen Blick auf Ihren Code. Zuerst Sie eine Datei erhalten Griff

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

dann erstellen Sie eine Tabelle

local val = {} 

Sie die Datei Zeile für Zeile lesen, ausdrucken

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

Sie jedes Spiel Einsatz für '[%d]%d' in jeder Linie in Ihre Tabelle val

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

Jetzt machen Sie etwas, das nur sinnvoll wäre, nachdem Sie alle Zeilen Ihrer Datei in val geparst haben. Dies geschieht jedoch für jede Zeile, da Sie sich immer noch in der Zeilenschleife befinden.

for i, v in ipairs(val) do 

ich bin eine Nummer, was ist das Maximum einer einzigen Nummer? Diese Zeile ist also Unsinn.

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

sig ist eine globale Variable. in deinem Fall ist es eine Schnur. sig [n] wird Ihnen natürlich einen Fehler geben, da Sie nur Tabellenwerte indizieren können.

  sig = v 
      print(sig) 
    end 

print(n) 

end 

f:close() 

Das String-Muster '[% d]' macht nicht viel Sinn. [] erstellt eine Klasse von Zeichen. Und% d steht für eine beliebige Zahl. Wenn man das in eine Klasse einordnet, macht es keinen Unterschied, nur% d zu verwenden.

Ihr Code zeigt, dass Ihnen grundlegende Kenntnisse in Lua fehlen. Bitte machen Sie vor dem Versuch, Dateien zu analysieren, ein Anfänger-Tutorial.

Die Struktur Ihres Codes zeigt an, dass Sie nicht wirklich über die Reihenfolge der Vorgänge nachgedacht haben. Schreib Stift und Papier und denke, bevor du mit dem Programmieren beginnst.

+0

Ich denke schon. Ich werde mehr über mein Problem nachdenken und auch lernen. Danke für deinen Kommentar. – darren

Verwandte Themen