Lua in Dateien schreiben

Kokiri

Cadet 1st Year
Dabei seit
Feb. 2013
Beiträge
13
Hallo liebe Community

Ich versuche momentan mit LUA etwas in eine Datei zu schreiben.
Dazu nutze ich diesen Code.

Code:
datei = io.open("benutzer.txt", "a")
datei:write("testnachricht")
datei:close()
Soweit alles ok. Es wird auch Testnachricht in die Benutzer.txt geschrieben.
Doch wie sieht es so aus:

Code:
datei = io.open("benutzer.txt", "a")
write("Nachricht eingeben: ")
nachricht = io.read()
datei:write(?)
datei:close()
Wenn ich nun die Eingabe des Users in der Variable "nachricht" in die Datei speichern möchte, wie ist das möglich?

Danke schonmal.
 

matterwave

Ensign
Dabei seit
März 2011
Beiträge
129
Ohne jeweils explizit mit Lua gearbeitet zu haben, hätte ich das intuitiv so gemacht:
Code:
repeat
   nachricht = io.read()
until nachricht ~= ""
datei:write(nachricht)
datei:close()
Vgl. Programming in Lua (Englisch)
 

Kokiri

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
13
Ne das geht so nicht. Außerdem muss er die Datei ja zuerst einmal öffnen.
 

Freezedevil

Lt. Junior Grade
Dabei seit
Mai 2011
Beiträge
503
Nachdem ich eben meinen Erstkontakt mit lua hatte hab ich folgendes getestet und es geht.

Code:
datei = io.open("test", "a")
io.write("nachricht: ")
nachricht = io.read("*line")
datei:write(nachricht)
datei:close()
Du musst read irgendwie sagen wie viel es lesen soll.
"*all"reads the whole file
"*line"reads the next line
"*number"reads a number
numreads a string with up to num characters

stand so auch schon in dem Link von matterwave
 
Zuletzt bearbeitet:

matterwave

Ensign
Dabei seit
März 2011
Beiträge
129
So, ich habe mich gerade noch einmal unter Linux eingeloggt:
Code:
file = io.open("foo.txt", "a") -- create and open file. Mode = appendix
io.write("Input: ")
repeat
	message = io.read("*line") -- read the currend line
until message ~= "" -- repeat as long as it's empty
file:write(message) -- append the message at the end of the file
file:close() -- finally close it
Funktioniert einwandfrei. (Nur der Code-Highlighter kommt mit Lua nicht zurecht)

Ich vermute Dein Problem tritt in Zeile 2 auf:
Da fehlt ein "io." vor dem write. ;)

Ansonsten, wie lautet denn die Fehlermeldung? In welcher Zeile tritt der Fehler auf?
 

Kokiri

Cadet 1st Year
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
13
Hey

Also das klappt auf jeden Fall schon einmal.

Wobei mir die Vorgehensweise noch nicht ganz klar ist.

datei = io.open("test", "a") -- Öffnet die Datei ja mit dem Modus a für append
io.write("nachricht: ")
nachricht = io.read("*line")
datei:write(nachricht) -- Schreibt in die Nachricht
datei:close() -- Schließt die Nachricht

Aber was macht jetzt genau

io.write("nachricht: ")
nachricht = io.read("*line")

warum muss man line angeben un welche line liest der denn? und warum steht das io.write vor dem read?

Gruß Kokiri
 

Freezedevil

Lt. Junior Grade
Dabei seit
Mai 2011
Beiträge
503
io.write(...) schreibt auf stdout(standardoutput, also die console) und dient nur dazu um den Nutzer zu zeigen, was er eingeben soll und kann daher aus funktionaler Sicht auch weggelassen werden.

io.read ließt von stdin (standardinput, also der console) und muss wissen wie viel es lesen soll. Wenn es eine line lesen soll, liest es praktisch bis zum ersten newline (also nem enter) was in diesem Fall sicher das günstigste ist. Somit steht in nachricht hinterher alles was der Benutzer bis zum Enter eingegeben hat.
 
Top