KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: Mit Lua Script die Variable einer Textdatei verändern
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Leute,

ich habe folgendes Problem: Ich möchte gerne eine Variable in einer Textdatei via Luascript verändern. Bsp. die Variable in der Textdatei lautet a = 0. Ich möchte jetzt die Variable z.B in a = 2 ändern.

Ich habe schon alles Versucht aber nichts hat geklappt.
Variablen in Textdateine schreiben habe ich bereits hinbekommen.

Konkret gesagt will ich eine einzelne Zeile in der Textdatei durch eine neue Zeile ersetzten.

Mein Lösungsansatz ist folgender:

function trans()
datei = io.open("test.txt","r")
datei:read(*a)
-- hier müsste irgendetwas mit datei:lines() oder so reinkommen
datei:write("a = 2")
end

trans()

Danke schonmal im Vorraus
Du willst also in einer Lua Datei einen Wert schreiben und diesen verändern, damit er gespeichert ist, auch wenn man das Programm verlässt ? Und in später wieder einlesen kann. Also so ähnlich wie Highscores oder so ?
du hast die datei mit "r" im lese modus geoeffnet nimm stattdessen "wb+"
Ja so ähnlich wie highscores.

Es muss doch irgendeine Möglichkeit geben eine Zeile in einer Textdatei zu löschen und einen neuen Text an der exakt selben position wieder einzusetzten...
du musst die datei komplett einlesen, und indie neue alles eingelesene bis zur bestimmten stelle wieder schreiben, dann gewuenschte aenderung reinschreiben und restliches eingelesenes schreiben. ist nicht sehr schwer, aber man sollte sich mit tabellen, schleifen und stringoperatoren auskennen, um das elegant zu loesen.
also müsste das so aussehen, wenn ich mich nicht irre:

Code:
function trans()
dateitoread = io.open("test.txt","r")
dateitoread:read(*a)
dateitoread:close()
dateitowrite =  io.open("test.txt","w")
dateitowrite:write("a = 2")
dateitowrite:close()
end

trans()


wenns falsch ist bitte korrigieren Big Grin
mfg

Ihr macht es euch viel zu kompliziert, ihr vergesst immer das Lua eine Script Sprache ist:

Code:
function readScore()
     dofile("score.txt")
end

function writeScore()
     d = io.open("score.txt","w")
     d:write("a = "..a.."\n")
     d:write("b = "..b.."\n")
     d:write("c = "..c.."\n")
     d:close()
end

Bevor man writeScore() ausführt müssen a,b,c schon deklariert sein, sonst gibt es einen Erorr.
Bei der Variante wird alles überschriben man muss der Variabele vor einen anderen Wert zu weisen.

Ich weiß jetzt nicht ob das wirklich die Lösung für den Problem, wenn nicht versuch es mal exakter zu beschreiben.

Ich brauch das für einen Zufallsgenerator den ich grade mache. Er wird zum Ausfragen von Schulklassen verwendet. Derzeit benutzt es mein IT/Deutsch Lehrer.

Es gibt bereits eine Klassenliste in der man Eintragen kann wer schon ausgefragt wurde. Wenn der Zufallsgenerator auf z.B die Zahl 3 kommt, SOLL der 3. Wert in der Klassenliste verändert werden und zwar von "nein" (wie noch nicht ausgefragt) nach "ja" wie schon ausgefragt. Das Auslesen funzt schon wunderbar nur eben diese Kleinigkeit, dass man die schon ausgefragten nicht manuell eintragen muss würde dem ganzen das Sahnehäubchen geben.

Die Textdatei sieht folgendermaßen aus:

Nr1 = "nein"
Nr2 = "nein"
Nr3 = "nein"
Nr4 = "nein"
Nr5 = "nein"
Nr6 = "nein"

(etc. bis Nr40)

Wenn der Zufallsgenerator in der Script.lua jetzt Nr3 ausgewählt hat, soll unmittelbar danach der Wert Nr3 = "nein" in den Wert Nr3 = "ja" geändert werden. Das Problem bei euren (trotzdem sehr nützlichen) Lösungsmöglichkeiten ist, das dabei alles überschrieben wird, bzw. der Wert NUR an den letzten Wert angehängt wird.

Vielleicht ist es jetzt klarer... Wink
wenns nicht drängt, kann ich dir das am freitag fertig machen.
also ungefär so oder was:

Code:
function writeScore()
     d = io.open("score.txt","w")
     d:write("nr1 = "..nr1.."\n")
     d:write("nr2 = "..nr2.."\n")
     d:write("nr3 = "..nr3.."\n")
--etc bis nr. 40
     d:close()
end

oder täusche ich micht da?

mfg

nee, mit schleife ist besser. ich habe schon eine getestete, funktionierende funktion fertig. die funktion von mir braucht NUR die zeilenangabe, den rest macht sie von selbst. ich poste es, sobald ich an den pc komme, bin mit psp on.

Edit: hier ist die Funktion:

Code:
function anpassen(klassennr)
    file=io.open("klassen.txt","r")
    line=file:read("*l")
    i=1
    txt={}
    while line~=nil do
        txt[i]=line
        i=i+1
    line=file:read("*l")
    end
    file:close()
    file=io.open("klassen.txt","wb+")
    i=1
    while i<klassennr do
        file:write(txt[i].."\n")
        i=i+1
    end
    file:write("Nr"..i.." = \"ja\"\n")

    while i<table.getn(txt) do i=i+1
        file:write(txt[i].."\n")
        
    end
end


einfach mit anpassen(*zeilennummer*) aufrufen
natürlich wird *zeilennummer* dementsprechend ersetzt, z.b anpassen(2).

In diesem Fall muss die textdatei klassen.txt heissen, einfach an den stellen file=io.open("klassen.txt","r") und file=io.open("klassen.txt","wb+") anpassen. wers genereller braucht, kann das hier versuchen (ungetestet):

Code:
function anpassen(dateiname,zeile,ersatz)
    file=io.open(dateiname,"r")
    line=file:read("*l")
    i=1
    txt={}
    while line~=nil do
        txt[i]=line
        i=i+1
    line=file:read("*l")
    end
    file:close()
    file=io.open(dateiname,"wb+")
    i=1
    while i<zeile do
        file:write(txt[i].."\n")
        i=i+1
    end
    file:write(ersatz)

    while i<table.getn(txt) do i=i+1
        file:write(txt[i].."\n")
        
    end
end


diese funktion würde mit anpassen(dateiname,zeile,ersatz) aufgerufen
detainame = name der datei XD
zeile = zeile die ersetzt werden soll
ersatz = dass was in die zeile geschrieben werden soll.

elender cheater Big Grin
muss ich mir merken.
mit dateien arbeiten is mir sowieso n dorn im auge Big Grin
lol, wo hab ich gecheatet? Big Grin Big Grin
ne ja kompliment an dich, so hätte ich das nie hingekriegt, wie man sieht Big Grin
Tausend Dank, ich werds mal testen...thumb
Referenz-URLs