Lua in Dateien schreiben

Kokiri

Cadet 2nd Year
Registriert
Feb. 2013
Beiträge
27
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.
 
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)
 
Ne das geht so nicht. Außerdem muss er die Datei ja zuerst einmal öffnen.
 
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:
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?
 
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
 
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.
 
Zurück
Oben