Variablenoperationen aus Strings erkennen
-
- Beiträge: 5
- Registriert: 16.07.2009 10:42
- Wohnort: Im PC-Zimmer
Variablenoperationen aus Strings erkennen
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...
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...
- Pelagio
- Beiträge: 424
- Registriert: 11.11.2004 17:52
- Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem - Wohnort: Bremen
Re: Variablenoperationen aus Strings erkennen
Hallo kaktusbombe,
auf die schnelle gebe ich dir einmal ein Codeschnitzel welches dir hoffentlich helfen kann.
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$
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS].
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS].

Re: Variablenoperationen aus Strings erkennen
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.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.
Grüße ... Kiffi
a²+b²=mc²
-
- Beiträge: 5
- Registriert: 16.07.2009 10:42
- Wohnort: Im PC-Zimmer
Re: Variablenoperationen aus Strings erkennen
@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?!?)
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
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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Variablenoperationen aus Strings erkennen
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...
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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Variablenoperationen aus Strings erkennen
kaktusbombe hat geschrieben:Wenn ich "Lua" suche, kommen bei mir keine Ergebnisse angezeigt...
(bin ich zu blöd zum Suchen?!?)


Such mal nach *lua*.
Grüße ... Kiffi
a²+b²=mc²
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Variablenoperationen aus Strings erkennen
Lua libkaktusbombe hat geschrieben: Wenn ich "Lua" suche, kommen bei mir keine Ergebnisse angezeigt...
(bin ich zu blöd zum Suchen?!?)
Re: Variablenoperationen aus Strings erkennen
oder sots-soft hat geschrieben:Lua lib

Eventuell könnte das hier noch interessant sein?
PBScript - Scriptsprache mit PureBasic-Syntax
(habe ich selber noch nicht ausprobiert)
Grüße ... Kiffi
a²+b²=mc²
Re: Variablenoperationen aus Strings erkennen
hi,
sowas zb:
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