Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249386 (10822)
  Suchen
 Zurück zur Übersicht
 AutorThema: String auseinander nehmen?
Sascha Willecke
Datum:29.10.01 15:23 Antwortenals Email verschicken (sascha@willecke-net.de) 


Hallo,

ich habe einen string in dieser form:

SX100SY100BX50BY200PU10

Nun möchte ich diesen String so zerlegen, dass ich folgendes erhalte:

SX=100
SY=100
BX=50
BY=200
PU=10

Ist das möglich?

Gruß
Sascha


Andreas Miethe
Datum:29.10.01 18:19 Antwortenals Email verschicken (andreas@andreas-miethe.de) 


Hallo Sasche,

dafuer gibt es in Profan diverse Stringfunktionen !

Ein Beispiel :

Declare S$,x%,a%
Declare Search$,Find$,F$
x% = 2
S$ = "SX100SY100BX50BY200PU10"
F$ = S$
Search$ = "SX,SY,BX,BY,PU"
Whilenot x% = 6
'erstmal filtern und Semikolon einfuegen
'INS$ fuegt String in String ein
'INSTR ermittelt die Position
'SUBSTR$ ermittelt Teilstring
Find$ = Ins$(";",F$,@Instr(Substr$(Search$,x%,","),S$)+a%)
F$ = Find$
Inc a%
Inc x%
EndWhile
Print Find$
Print

X% = 1
Whilenot x% = 6
'Ergebnis =
'die ersten beiden Zeichen +
'= +
'die rechstlichen Zeichen
Print Mid$(Substr$(Find$,x%,";"),1,2)+\
"="+\
Mid$(Substr$(Find$,x%,";"),3,Len(Substr$(Find$,x%,";")))
Inc x%
EndWhile

Waitinput
End



Thorsten
Datum:29.10.01 18:44 Antwortenals Email verschicken (mrk@mrk-soft.de) 


Das gehört wohl mehr ins forum "Einsteiger",
den mit ein bisssel überlegung ist das
recht simpel nichtsdesto trotz:


'string auseinandernehmen, (R) MRK-Soft 2001
'profan 7.0

'lokal für alle declarieren
declare sx%, sy%, bx%, by%, pu%

proc STW
 parameters quell$
 declare zl1$, zl2$, zl1%
 decimals 0
 zl1% = 1
 While zl1% < len(quell$)
  zl1$ = zl1$ + upper$(mid$(quell$,zl1%,1))
  zl2$ = str$(val(mid$(quell$,zl1%+1,3)))
  If equ$(zl1$,"SX")
   sx% = val(zl2$)
   add zl1%,len(zl2$)
   zl1$ = ""
  Endif
  If equ$(zl1$,"SY") 
   sy% = val(zl2$)
   add zl1%,len(zl2$)
   zl1$ = ""
  Endif
  If equ$(zl1$,"BX") 
   bx% = val(zl2$)
   add zl1%,len(zl2$)
   zl1$ = ""
  Endif
  If equ$(zl1$,"BY") 
   by% = val(zl2$)
   add zl1%,len(zl2$)
   zl1$ = ""
  Endif
  If equ$(zl1$,"PU") 
   pu% = val(zl2$)
   add zl1%,len(zl2$)
   zl1$ = ""
  Endif
 inc zl1%
 Wend
endproc


'und das testprogramm
declare werte$

werte$ = "SX101SY102BX54BY200PU10"
STW werte$   'proc aufrufen
 
print "SX",sx%
print "SY",sy%
print "BX",bx%
print "BY",by%
print "PU",pu%

waitkey



gruss Thorsten




Sascha Willecke
Datum:29.10.01 19:50 Antwortenals Email verschicken (sascha@willecke-net.de) 


Hallo,

danke für eure schnellen antworten aber thorsten sag mal hättest du dir das nicht sparen können: "mit ein bischen überlegen...."! Ich hab überlegt aber ich habs nicht ganz so hinbekommen wir ihr! Außerdem dachte ich das es vielleicht ne kürzere und schnellere variante gibt!

Gruß

Sascha


Thorsten
Datum: 30.10.01 07:34 Antwortenals Email verschicken (mrk@mrk-soft.de) 


Sascha, das war nit bös gemaint,

nur mit ein bissel schauen in der Hilfe bei
den String-Funktionen und dann noch ein
paar eigene gedankengänge dazu hätte
man drauf kommen können, die Lösung von
Bernd, eine Zeile, (Definition), ist die
küreste, die machbar ist.

Thorsten



Bernhard Künzel
Datum:29.10.01 20:54 Antwortenals Email verschicken (b.kuenzel@chello.at) 


Hallo Sascha,
hier eine kurze Möglichkeit der Stringzerlegung für dein Problem
Def Wert(2) Val(SubStr$(Upper$($(1)),2,Upper$($(2))))
Declare S$
S$="SX100SY100BX50BY200PU10"
Print Wert(S$,"SX")
Print Wert(S$,"sy")
Print Wert(S$,"bx")
Print Wert(S$,"BY")
Print Wert(S$,"PU")

MFG aus Innsbruck
Bernhard



Jörg Sellmeyer
Datum:30.10.01 00:58 Antwortenals Email verschicken (joerse@gmx.de) 


Hallo,
Ich hab' auch noch 'ne Methode:-)
declare s$

S$=translate$(translate$(translate$("SX100SY100BX50BY200PU10","SY",",SY"),"B",",B"),"P",",P")
S$=translate$(translate$(translate$(s$,"X","X="),"Y","Y="),"U","U=")
print s$
WhileLoop 5
print SubStr$(s$,&loop,",")
Wend
WaitInput
Jörg


 Zurück zur Übersicht