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?!?)
:freak: 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
ts-soft hat geschrieben:Lua lib
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