Frage von AntwortHunter, 51

Opencomputers Inhalt einer Datei löschen?

Ich arbeite gerade für ein paar Kumpel an einem Bankingprogramm in OpenComputers um ein Handelsystem mit Bankkonten usw. aufzubauen. Ich bin damit Größtenteils durch, stehe aber vor dem Problem mit dem Speichern der Bankkonten. Für jedes Konto habe ich einen Server(OC) gebaut. Das Programm soll den Jeweiligen Kontobetrag in einer Datei namens Konto.txt speichern. Wenn etwas von Konto zu Konto überwiesen wird, wird die Datei Geladen, der Inhalt in eine Variable gespeichert welche entsprechend der Überweisung verändert wird. Danach soll der Inhalt der Konto.txt Datei geleert werden, dass dort nichts drinsteht. Anschließend wird der Neue Kontowert in die Datei gespeichert, welche dann wieder geschlossen wird. Ich habe aber keine Ahnung wie ich das Leeren der Datei tun soll. was muss ich dazu in den Code schreiben?

Antwort
von n0b0dyelse, 23

Du kannst die datei mit der option "w" öffnen, so wird der vorhandene inhalt überschrieben:

fs.open("Konto.txt", "w")
Kommentar von AntwortHunter ,

Danke, das hat mir sehr geholfen. Da das das erste mal ist, dass ich mit Opencomputers wirklich intensiv arbeite, kenne ich mich auch noch nicht wirklich mit der API aus. jetzt habe ich immer den Fehler "attempt to call field 'read' (a Nil value)" die Programmzeile(25) sieht so aus: modem.send(Tablet, Channel, Konto.read())

Die Variablen Tablet und channel sind nur, um eine Nachricht an das Tablet zu senden, da sich mit jedem Konto natürlich die Adresse des Tablets und der Port unterscheidet. die Variable Konto besitzt den Dateinamen der Datei, die den Wert des Kontos gespeichert hat(Konto.txt).

Kommentar von n0b0dyelse ,

Hmm, es wäre hilfreich, wenn ich den ganzen Code zu sehen bekommen könnte.
Ich vermute, dass dein Konto Objekt nicht mehr im scope der sende funktion enthalten ist, da das ganze ja asynchron abläuft, versuch mal Konto.read() in eine extra variable zu speichern und erst dann der send funktion zu übergeben.

Kommentar von AntwortHunter ,
Kommentar von n0b0dyelse ,

Dein Problem ist, dass du nicht auf den Zeiger der Datei zugreifst sondern auf deine Variable "Konto" in der nur "Konto.txt" steht richtig ginge es so:

local konto = "Pfad/Zu/Konto.txt"
local file = fs.open(konto, "wb") -- variable "file" enthält Zeiger auf Inhalt von Konto.txt

modem.send(Tablet, Channel, file.read())
file.close()
Kommentar von AntwortHunter ,

DANKE! Werde ich so machen.

Kommentar von AntwortHunter ,

http://pastebin.com/K0fkXh00

jetzt kommt immer der Fehler(ich versuch mit dem Clientprogramm den wert zu lesen):


bad Argument #2 (number expected, got Nil)
stack traceback:
[C]: in Funktion 'error'
machine:984: in Funktion
(...tail calls...)
/autorun.lua:24: in main chunk
(...tail calls...)
Ich habe schon geschaut, in der Kontodatei steht als einzigstes 0. der Rest hat eigentlich einen Wert. Eine andere zahl einzugeben bringt auch nix.
Kommentar von n0b0dyelse ,

Versuchs mal damit:

https://gist.github.com/anonymous/d3ccebdcc0c7d659f70c8cf3eebe2e4f

Du hattest einige Fehler was Groß- und Kleinschreibung im Programmcode angeht, ich hab dir im gist noch eine Pfrüfung eingebaut ob die Datei überhaupt existiert (Die Prüfung würde auch einmal reichen)

Btw: der Stacktrace(Fehlermeldung) ist nicht komplett(weshalb ich nicht genau weiß, an was es liegen könnte), hast du möglicherweise Zugriff auf den Server ? - dort sollte im Mod Ordner irgendwo ein Error Log bzw. eine Log datei herumliegen, da steht die ganze Fehlermeldung drinnen.

Kommentar von AntwortHunter ,

Ich habe Zugriff auf den Server, da er mir gehört. Momentan teste ich das Programm im singleplayer, da ich mit meinen freunden auf ner andern Welt mit anderen Mods ne Challenge mache: wir bauen uns ein große Base und starten dann den Invasion mod, der Monster beschwört, die in die Base reinkommen wollen. Adressen hab ich im Testprogramm natürlich angepasst. Wo genau befindet sich die Datei?(kann sie leider nicht finden :/...)

Kommentar von n0b0dyelse ,

Da hatte ich mich vertan, dieses Feature war bestandteil von Computercraft, nicht Opencomputers. Leider kann ich dir bzgl. der Fehlermeldung so nicht weiterhelfen, da meine Opencomputers Kenntnisse mittlerweile recht eingestaubt sind, müsste ich das mal lokal testen. Ich hab gesehen, dass es eine Debug Karte als Item geben soll, vielleicht kommst du ja damit zu einem vollständigen Stack-Trace (einer vollgständigen Fehlermeldung).

Keine passende Antwort gefunden?

Fragen Sie die Community