Hallo, ich versuche, Vertices in einer .obj-Datei in eine Tabelle zu konvertieren, die tatsächlich in lua verwendet werden können.Lua mehrere Zeichenfolge Ersetzungen mit string.gsub
Dies ist, was eine OBJ-Datei wie folgt aussieht:
# Blender v2.77 (sub 0) OBJ File: ''
# www.blender.org
mtllib pyramid.mtl
o Cube
v 1.000000 0.000000 -1.000000
v 1.000000 0.000000 1.000000
v -1.000000 0.000000 1.000000
v -1.000000 0.000000 -1.000000
v -0.000000 2.000000 0.000000
vn 0.0000 -1.0000 0.0000
vn 0.8944 0.4472 0.0000
vn -0.0000 0.4472 0.8944
vn -0.8944 0.4472 -0.0000
vn 0.0000 0.4472 -0.8944
usemtl Material
s off
f 1//1 2//1 3//1 4//1
f 1//2 5//2 2//2
f 2//3 5//3 3//3
f 3//4 5//4 4//4
f 5//5 1//5 4//5
Alles was ich brauche sind die 5 Linien mit v beginnen wie folgt aussehen:
Node1= {x=1.000000, y=0.000000, z=-1.000000}
Node2= {x=1.000000, y=0.000000, z=1.000000}
Node3= {x=-1.000000, y=0.000000, z=1.000000}
Node4= {x=-1.000000, y=0.000000, z=-1.000000}
Node5= {x=-0.000000, y=2.000000, z=0.000000}
Mit dem Code schrieb ich, ich die Ausgabe zu sehen wie folgt aus verwaltet:
Node1= {x=1.000000 0.000000 -1.000000}
Node2= {x=1.000000 0.000000 1.000000}
Node3= {x=-1.000000 0.000000 1.000000}
Node4= {x=-1.000000 0.000000 -1.000000}
Node5= {x=-0.000000 2.000000 0.000000}
das ist mein Code, der die Arbeit tut:
inputFile = io.open("file.txt", "r")
io.input(inputFile)
string = io.read("*all")
io.close(inputFile)
outputFile = io.open("object.lua", "a")
io.output(otputFile)
i = 1
for word in
string.gmatch(string, " .?%d.%d%d%d%d%d%d .?%d.%d%d%d%d%d%d .?%d.%d%d%d%d%d%d") do
print(word)
-- outputFile:write("Node"..i.. "= {" ..word.. "}\n")
outputFile:write("Node"..i.. "= {" ..string.gsub(word, "(%s)", "x=", 1).. "}\n")
i = i + 1
end
Zuerst öffnet es die .obj-Datei und speichert alles in "string". Dann erstellt "object.lua". Für jede Zeichenfolge, die dieses Muster ist passend:
1.000000 0.000000 -1.000000
in string, string.gmatch wird es finden und es in die Ausgabedatei schreiben. Aber zuerst muss die Saite neu formatiert werden. Wie Sie sehen können, ist es mir gelungen, das erste Leerzeichen (% s) durch "x =" zu ersetzen. Außerdem muss das zweite Leerzeichen durch ", y =" und das dritte durch ", z =" ersetzt werden. Allerdings kann ich nicht sehen, wie man string.gsub in einer Weise verwendet, dass es mehrere verschiedene Ersetzungen tun kann.
Ist das der richtige Weg und ich mache nur etwas falsch? Oder gibt es eine andere Möglichkeit, diese Aufgabe zu erfüllen?
Lustige Beobachtung: 'string' hat seine Bedeutung (als Variable mit dem gleichen Namen eingeführt wurde) geändert, aber' string.gmatch' blieb richtig! –
'für x, y, z in Zeichenfolge: gmatch '\ nv% s + (% S +)% s + (% S +)% s + (% S +)'' ''Knoten' .. i .. '= {x =' ..x .. ', y =' .. y .. ', z =' .. z .. '} \ n'' –