2016-05-26 7 views
1

Beschleunigung wird in result.txt aufgezeichnet, aber ich möchte nur 1 Ergebnis in Ergebnis aufnehmen.Wie füge ich beim Schreiben in einer Schleife eine Zahl in den Dateinamen ein?

Ich mag nächstes Ergebnis in result_1.txt aufnehmen und dann result_2.txt, result_3.txt

Wie kann ich 1 Ergebnis in 1 txt-Datei aufzeichnen?

Dies ist mein Code.

local filename = "result.txt" 

local file = io.open(filename, "a") 

for i=1, 1000 do 

    sim:stepForward() 
    local p = ship.rb:getAcceleration():z() 
    file:write(string.format("%d\n",p)) 

end 

file:close() 

Antwort

2

Sie benötigen unterschiedliche Dateihandler für jede auszugebende Datei.

Der Einfachheit halber beginnt die Dateinamen unter der Annahme, mit result_1.txt:

for i = 1, 1000 do 
    local filename = "result_" + tostring(i) + ".txt" 
    local file = io.open(filename, "a") 
    -- write to file 
    file:close() 
end 
0

Um jedes in einer anderen Datei zu speichern Sie müssen jede Datei einzeln öffnen und zu schließen. Eine Funktion könnte geschrieben werden, um dies für Sie zu tun.

saveData = function (data, path) 
    local f = io.open(path, 'a') 
    f:write(data) 
    f:close() 
end 

Dann können Sie

saveData(string.format("%d\n",p), 'results_1.txt') 

Nun rufen sie alle in aufsteigender Reihenfolge zu bekommen wir einfach eine Schleife verwenden, und die Nummer mit der Zeichenfolge verketten.

for i = 1, 10, 1 do 
    local path = 'results_'..i..'.txt' 
    saveData(<insert data here>, path) 
end 

Alternativ können wir alle Daten in einer Tabelle gespeichert haben.

data = { <insert data here>, ... } 

Speichern Sie dann alle Daten in der Tabelle in ihre jeweiligen Dateien.

for i, v in ipairs(data) do 
    local path = 'results_'..i..'.txt' 
    saveData(v, path) 
end