Seite 1 von 1

Problem mit umwandeln von Strings...

Verfasst: 25.09.2008 00:42
von XCorE
Hi,

folgendes problem,




Ich arbeite grad an einen kleinen Program was mir Texte ändern soll,original sieht er so aus:

<object name="object">
<position>1979.498413 -2185.233643 12.622492</position>
<rotation>0.000000 0.000000 0.000000</rotation>
<model>3279</model>
</object>

und am ende soll er so aussehen:

CreateObject(3279,1979.498413,-2185.233643,12.622492,0.000000,0.000000,0.000000)

---

Das Problem ist nur das das alles nicht so ganz klappt...
Ich hab es bissher so versucht,den String raus zu suchen,also If FindString(...) und in der if RemoveString(...) um den jeweiligen String zu löschen,aber denn passiert nix,mach ich es ohne If und versuch es mit irgent ein String,gehts auch nicht,mach ich es mit so:

SetGadgetText(GetGadgetText(#MeinGadget,"bla","") geht es zwar,aber denn verschwindet gleich alles gleich...

Wie kann ich es nun so machen,das er nicht gleich alles löscht,sondern nur das was ich möchte ???

Heut krieg ich garnichts auf der reihe,wahrscheinlich werde ich sagen wenn ich die lösung hab wieso bin ich nicht darauf gekommen??-.- ^^

MfG.

XCorE

Verfasst: 25.09.2008 00:52
von STARGÅTE
hier mal meine Variante :

Code: Alles auswählen

Procedure.s MyStringField(String$, Index, Separator$, Start$="", Ende$="")
 If Start$
  Start = FindString(String$, Start$, 1)
 Else
  Start = 1
 EndIf
 If Ende$
  Ende = FindString(String$, Ende$, 1)
 Else
  Ende = Len(String$)
 EndIf
 If Start
  String$ = Mid(String$, Start+Len(Start$), Ende-Start-Len(Start$))
  ProcedureReturn StringField(String$, Index, Separator$)
 EndIf
EndProcedure

Procedure.s Umwandlung(String$)
 NewString$ = "CreateObject("
 NewString$ + MyStringField(String$, n, " ", "<model>", "</model>")
 For n = 1 To 3
  NewString$ + "," + MyStringField(String$, n, " ", "<position>", "</position>")
 Next
 For n = 1 To 3
  NewString$ + "," + MyStringField(String$, n, " ", "<rotation>", "</rotation>")
 Next
 NewString$ + ")"
 ProcedureReturn NewString$  
EndProcedure  


OpenWindow(0, 0, 0, 800, 640, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 CreateGadgetList(WindowID(0))
  EditorGadget(1, 10,  10, 780, 280)
  EditorGadget(2, 10, 310, 780, 280)
  ButtonGadget(3, 10, 610, 780, 20, "Umwandeln")

Repeat
 Event = WaitWindowEvent()
 Select Event
  Case #PB_Event_CloseWindow
   End
  Case #PB_Event_Gadget
   Select EventGadget()
    Case 3
     Text$ = GetGadgetText(1)
     NewText$ = ""
     Start = 1
     Repeat
      Start = FindString(Text$, "<object", Start)
      If Start
       Ende = FindString(Text$, "</object>", Start)
       Inhalt$ = Mid(Text$, Start, Ende-Start)
       If Inhalt$
        NewText$ + Umwandlung(Inhalt$) + #CRLF$
       EndIf
       Start = Ende     
      EndIf
     Until Not Start
     SetGadgetText(2, NewText$)
   EndSelect
  Case #PB_Event_Menu
   Select EventMenu()
    Case 0
   EndSelect
 EndSelect
ForEver
EDIT: Aufgrund eines Geschpräch in ICQ ...

EDIT2: Bisonte hat natürlich recht :wink: nur habe ich mich mit der LIB noch nicht befasst...

Re: Problem mit umwandeln von Strings...

Verfasst: 25.09.2008 01:05
von Bisonte
XCorE hat geschrieben:
<object name="object">
<position>1979.498413 -2185.233643 12.622492</position>
<rotation>0.000000 0.000000 0.000000</rotation>
<model>3279</model>
</object>
Das riecht aber streng nach XML... Also dürfte da noch mehr in der Datein stehen als dieses Object. Und wenn dies so ist, dann wären die XML Funktionen ratsamer...

Das geht einfacher als per stringfunktionen alles rauszupulen...

Verfasst: 25.09.2008 01:14
von XCorE
Das Script kommt aus dem MTA 1.1 Editor ;)


Thx STARGATE :D

Problem ist gelöst ;)

Verfasst: 25.09.2008 01:20
von STARGÅTE
ja aber wie Bisonte schon sagte, bringt dich die XML-Lib schneller weiter ...

Verfasst: 25.09.2008 03:09
von XCorE
Ja aber das reicht vollkommen aus,desweitern kann ich später machen ;)

thx nochma :D