2016-05-30 7 views
0

Ich habe eine Datei Text "a.txt":lesen Datei Text und speichern Sie in Array 2d

1 2 3 
4 5 6 
7 8 9 

Jetzt möchte ich speichern Sie es in Array 2d:

array = {{1,2, 3} {4,5,6} {7,8,9}} ich habe versuchen:

array ={} 
file = io.open("a.txt","r") 
io.input(file) 
i=0 
for line in io.lines() do 
    array[i]=line 
    i=i+1 
end 

Aber es hat nicht den Erfolg. Sagt mir jemand einen Weg, es zu tun?

Antwort

3

Sie haben einige Fehler in Ihrem Code. Sie öffnen zuerst die Datei a.txt und legen sie dann für die Standardeingabe fest. Sie brauchen das Öffnen nicht(). Aber ich empfehle die Datei zu öffnen und auf sie arbeiten, mit dem lines() Iterator auf die Datei:

array = {} 
file = io.open("a.txt","r") 
i = 0 
for line in file:lines() do 
    array[i]=line 
    i=i+1 
end 

Weiterhin mit Ihrer Methode, bekommt man nicht das Array Sie ({ {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }) gewünscht, sondern eine Reihe enthält Strings als Elemente: { "1 2 3", "4 5 6", "7 8 9" }. Um letzteres zu erhalten, müssen Sie die gelesene Zeichenfolge analysieren. Eine einfache Möglichkeit, dies zu tun ist string.match mit Aufnahmen zu verwenden:

array ={} 
file = io.open("a.txt","r") 
for line in file:lines() do 
    -- extract exactly three integers: 
    local t = { string.match(line, "(%d+) (%d+) (%d+)")) } 
    table.insert(array, t) -- append row 
end 

Siehe https://www.lua.org/manual/5.3/manual.html#pdf-string.match. Für eine beliebige Anzahl von ganzen Zahlen (oder anderen Zahlen) in jeder Zeile können Sie eine Schleife zusammen mit string.gmatch() verwenden:

array ={} 
file = io.open("a.txt","r") 
for line in file:lines() do 
    local t = {} 
    for num in string.gmatch(line, "(%d+)") do 
     table.insert(t, num) 
    end 
    table.insert(array, t) 
end 
+0

Dies ist genau das, was ich suche. Vielen Dank! – ledien

+0

Gern geschehen! Wenn Sie meine Antwort mögen, seien Sie nett und akzeptieren Sie es :) – pschulz

+2

Sie können 'für Zeile in io.lines (" a.txt ") tun'. – lhf

Verwandte Themen