Seite 1 von 2
Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 10:18
von kaktusbombe
Hallo, Forum,
Ja ich weiß, der Titel ist nicht sonderlich aussagekräftig, aber mir ist grad nichts besseres eingefallen.
Im Grunde suche ich eine Möglichkeit, wie ein Programm aus einem String erkennt, was es mit einer Variablen machen soll.
Ich glaube, ein Beispiel hift am besten:
Ich habe ein Textfester, in dem ich eingeben kann: "irgendeine_Variable=53"
und das Programm soll nun die Variable "irgendeine_Variable" mit 53 füllen.
War mein Problem soweit verständlich?
Ich habe halt noch recht wenig Erfahrungen mit Stringoperationen und habe deshalb
keine Ahnung, wie ich an besten an das Problem ran komme. Ziel ist es, eine brauchbare Konsole für ein zukünftiges Spiel zu erstellen, an der ich, während das Spiel läuft, irgendwelche Werte anpassen kann.
Ich hoffe, ihr könnt mir dabei helfen...
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 10:56
von Pelagio
Hallo kaktusbombe,
auf die schnelle gebe ich dir einmal ein Codeschnitzel welches dir hoffentlich helfen kann.
Code: Alles auswählen
Variable$="Test1=50"
If FindString(Variable$,"Test1",1)
Test1$ = StringField(Variable$, 2, "=")
ElseIf FindString(Variable$,"Test2",1)
Test2$ = StringField(Variable$, 2, "=")
;ElseIf usw.....
EndIf
Debug Test1$
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 11:07
von Kiffi
kaktusbombe hat geschrieben:Ziel ist es, eine brauchbare Konsole für ein zukünftiges Spiel zu erstellen, an der ich, während das Spiel läuft, irgendwelche Werte anpassen kann.
eine andere Möglichkeit ist es, LUA hierfür zu benutzen (ist meines Erachtens genau dafür geschrieben worden). Als Suchbegriff eingegeben, werden hier einige brauchbare Treffer gelistet.
Grüße ... Kiffi
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 14:12
von kaktusbombe
@Pelagio: Genau das wollte ich verhindern versuchen, das erfordert einen Riesen Select-Baum,
wenn ich auf ALLE Variablen zugreifen können will...
Wenn ich "Lua" suche, kommen bei mir keine Ergebnisse angezeigt...
(bin ich zu blöd zum Suchen?!?)
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 14:16
von STARGÅTE
Dafür sollte eine Map benutzt werden, damit der SelectBaum entfällt:
Code: Alles auswählen
Beispiel$ = "irgendeine_Variable=53:LaberLaber=123"
NewMap Variable()
Index = 1
While StringField(Beispiel$, Index, ":")
Key$ = Trim(StringField(StringField(Beispiel$, Index, ":"), 1, "="))
Value$ = Trim(StringField(StringField(Beispiel$, Index, ":"), 2, "="))
Variable(Key$) = Val(Value$)
Index + 1
Wend
ForEach Variable()
Debug MapKey(Variable())+" = "+Str(Variable())
Next
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 14:17
von Kaeru Gaman
das erfordert keinen Selectbaum...
im Endeffekt musst du dir sowieso überlegen, wie du wärend des Programmablaufs auf die Variablen zugreifst.
also, wenn die Alle unterschiedlich heißen, wirst du wohl oder übel auch so viele Bedingungen brauchen, weil du für jeden Namen eine extra Zuweisung hinschreiben musst.
aber wenn du alle Werte die veränderbar sein sollen in ein Array packst, kannst du das einfach per Index auslesen.
oder du nimmst gleich eine Map, die Namen als Indices akzeptiert.
[edith]
*möp* Stargate war mal wieder schneller....
@Stargate
da fehlt aber noch die Prüfung, ob das Element existiert und wenn nicht eine Fehlermeldung.
schließlich kann man sich ja in der Console auch vertippen...
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 14:19
von Kiffi
kaktusbombe hat geschrieben:Wenn ich "Lua" suche, kommen bei mir keine Ergebnisse angezeigt...
(bin ich zu blöd zum Suchen?!?)

nee. Ist nur mal wieder unsere grandiose Suchmaschine.
Such mal nach
*lua*.
Grüße ... Kiffi
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 14:19
von ts-soft
kaktusbombe hat geschrieben:
Wenn ich "Lua" suche, kommen bei mir keine Ergebnisse angezeigt...
(bin ich zu blöd zum Suchen?!?)
Lua lib
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 14:24
von Kiffi
oder so
Eventuell könnte das hier noch interessant sein?
PBScript - Scriptsprache mit PureBasic-Syntax
(habe ich selber noch nicht ausprobiert)
Grüße ... Kiffi
Re: Variablenoperationen aus Strings erkennen
Verfasst: 02.03.2010 20:53
von Kevin
hi,
sowas zb:
Code: Alles auswählen
Procedure FindNext(string$, searchpos=1, searchstrings$="|=|+|-|*|/|:|§|")
re=0
For z=searchpos To Len(string$)
re=FindString(searchstrings$,Mid(string$,z,1)+"|",1)
If re
re=z
Break
EndIf
Next
ProcedureReturn re
EndProcedure
Procedure.s GetFindNext(string$, searchpos=1, searchstrings$="|=|+|-|*|/|:|§|")
re=0
For z=searchpos To Len(string$)
re$=Mid(string$,z,1)
re=FindString(searchstrings$,re$+"|",1)
If re
Break
EndIf
Next
ProcedureReturn re$
EndProcedure
Global S_VarCount.w=1
Global Dim S_Var.s(S_VarCount)
Global Dim S_VarM.i(S_VarCount)
Procedure S_AddPBVar(name$, *var)
find = 0
For z=1 To S_VarCount
If S_Var(z)=""
S_Var(z)=name$
S_VarM(z)=*var
find = 1
Break
EndIf
Next
If find=0
S_VarCount+1
ReDim S_Var.s(S_VarCount)
ReDim S_VarM.i(S_VarCount)
S_Var(S_VarCount)=name$
S_VarM(S_VarCount)=*var
EndIf
EndProcedure
Procedure S_IsVar(string$)
re=0
If string$<>""
For z=1 To S_VarCount
buf$=S_Var(z)
If buf$=string$
re=z
Break
EndIf
Next
EndIf
ProcedureReturn re
EndProcedure
Procedure S_RunScript(script$)
script$+"§"
find=0
find$=""
Repeat
oldfind=find+1
oldfind$=find$
find$=GetFindNext(script$,find+1)
find=FindNext(script$,find+1)
oldspace$=space$
space$=Trim(Mid(script$,oldfind,find-oldfind))
oldfind=find+1
oldfind$=find$
find$=GetFindNext(script$,find+1)
find=FindNext(script$,find+1)
oldspace$=space$
space$=Trim(Mid(script$,oldfind,find-oldfind))
bufa=S_IsVar(oldspace$)
bufb=S_IsVar(space$)
If bufb
lbufb.l=PeekL(S_VarM(bufb))
Else
lbufb.l=Val(space$)
EndIf
Select oldfind$
Case "="
If bufa
lbuf.l=PeekL(S_VarM(bufa))
lbuf=lbufb
PokeL(S_VarM(bufa),lbuf)
EndIf
Case "+"
If bufa
lbuf.l=PeekL(S_VarM(bufa))
lbuf+lbufb
PokeL(S_VarM(bufa),lbuf)
EndIf
Case "-"
If bufa
lbuf.l=PeekL(S_VarM(bufa))
lbuf-lbufb
PokeL(S_VarM(bufa),lbuf)
EndIf
Case "*"
If bufa
lbuf.l=PeekL(S_VarM(bufa))
lbuf*lbufb
PokeL(S_VarM(bufa),lbuf)
EndIf
Case "/"
If bufa
lbuf.l=PeekL(S_VarM(bufa))
lbuf/lbufb
PokeL(S_VarM(bufa),lbuf)
EndIf
EndSelect
If find$="§"
Break
EndIf
Until find=0
EndProcedure
; -----------------------
testvar1.l = 0
testvar2.l = 0
S_AddPBVar("var1", @testvar1)
S_AddPBVar("var2", @testvar2)
Debug testvar1 ; ist 0
S_RunScript(" var1 = 5 ")
Debug testvar1 ; ist 5
testvar2 = 4 ; var2 = 4
buf$ = " var1 + var2" ; var1 = 9
buf$ + ": var1 / 3" ; var1 = 3
buf$ + ": var2 = 1" ; var2 = 1
S_RunScript(buf$)
Debug testvar1; ist 3
Debug testvar2; ist 1