Aus einem String Teile herausfiltern

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Aus einem String Teile herausfiltern

Beitrag von MJP »

Frohes neues Jahr euch allen :mrgreen:
Ich mache einen Chat mit meheren Raümen um nicht immer einen neuen Server auf zu machen habe ich mir das ausgedacht:

Code: Alles auswählen

{ROOM}TestRoom{/ROOM}{CLIENT}PIMP{/CLIENT}{MESSAGE}TEST{/MESSAGE}{FONT}ARIAL{/FONT}{COLOR}black{/COLOR}{BGCOLOR}green{/BGCOLOR}{SIZE}26{/SIZE}
Hiermit wollte ich die Infos rausfiltern aber irgendwie mach ich da was falsch :cry: :

Code: Alles auswählen

Nachricht.s="{ROOM}TestRoom{/ROOM}{CLIENT}PIMP{/CLIENT}{MESSAGE}TEST{/MESSAGE}{FONT}ARIAL{/FONT}{COLOR}black{/COLOR}{BGCOLOR}green{/BGCOLOR}{SIZE}26{/SIZE}"         
          sytxR = FindString(Nachricht, "{/ROOM}", 1)
          room.s= Mid(Nachricht,7,sytxR)  :Debug room
         ;-Clientabrage
          sytxC = FindString(Nachricht, "{CLIENT}", 1) 
          sytxC2= FindString(Nachricht, "{/CLIENT}", 1) 
          client.s= Mid(Nachricht,sytxC+8,sytxC2)  :Debug client
         ;-Nachricht
          sytxM = FindString(Nachricht, "{MESSAGE}", 1) 
          sytxM2= FindString(Nachricht, "{/MESSAGE}", 1)                                                                 
          message.s= Mid(Nachricht,sytxM+9,sytxM2)  :Debug message
         ;-Font
          sytxF = FindString(Nachricht, "{FONT}", 1)
          sytxF2= FindString(Nachricht, "{/FONT}", 1)                                                                
          font.s= Mid(Nachricht,sytxF+6,sytxF2)  :Debug font
          ;-Farbe
          sytxCo = FindString(Nachricht, "{COLOR}", 1) 
          sytxCo2= FindString(Nachricht, "{/COLOR}", 1)                                                                 
          color.s= Mid(Nachricht,sytxCo+7,sytxCo2)  :Debug color
          ;-Farbe
          sytxBc = FindString(Nachricht, "{BGCOLOR}", 1) 
          sytxBc2= FindString(Nachricht, "{/BGCOLOR}", 1)                                                                 
          bgcolor.s= Mid(Nachricht,sytxBc+8,sytxBc2)  :Debug bgcolor      
          ;-Groesse
          sytxS = FindString(Nachricht, "{SIZE}", 1)
          sytxS2= FindString(Nachricht, "{/SIZE}", 1)                                                                
          size.s= Mid(Nachricht,sytxS+7,sytxS2)  :Debug size
Das bekomme ich immer raus:

Code: Alles auswählen

TestRoom{/ROOM
PIMP{/CLIENT}{MESSAGE}TEST{/MESSAG
TEST{/MESSAGE}{FONT}ARIAL{/FONT}{COLOR}black{/COLOR}{BGC
ARIAL{/FONT}{COLOR}black{/COLOR}{BGCOLOR}green{/BGCOLOR}{SIZE}26{/SIZE}
black{/COLOR}{BGCOLOR}green{/BGCOLOR}{SIZE}26{/SIZE}
green{/BGCOLOR}{SIZE}26{/SIZE}
26{/SIZE}
Obwohl das ergebnis eigentlich das hier sein sollte: :?

Code: Alles auswählen

TestRoom
PIMP
TEST
ARIAL
black
green
26
THx 4 Help MJP :mrgreen:
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Du nutzt mid falsch

Laut hilfe:
Startposition, länge

Bei dir wirds so gemacht:
Startposition, endposition

Als Beispiel:

Code: Alles auswählen

sytxR = FindString(Nachricht, "{/ROOM}", 1)
          room.s= Mid(Nachricht,7,sytxR)  :Debug room 
Müsste sein:

Code: Alles auswählen

sytxR = FindString(Nachricht, "{/ROOM}", 1)
          room.s= Mid(Nachricht,7,sytxR-7)  :Debug room 
also hier statt
sytxR
sytxR-7
als 3. Parameter von Mid
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Beitrag von MJP »

uppsss :oops:
aber wie mache ich das jetzt z.B beim zweiten weil so geht es ja nicht:

Code: Alles auswählen

          sytxC = FindString(Nachricht, "{CLIENT}", 1) 
          sytxC2= FindString(Nachricht, "{/CLIENT}", 1) 
          client.s= Mid(Nachricht,sytxC+8,sytxC2-9)  :Debug client
[edit]
hat sich erledigt habs selber rausgefunden :mrgreen: :

Code: Alles auswählen

          sytxC = FindString(Nachricht, "{CLIENT}", 1) 
          sytxC2= FindString(Nachricht, "{/CLIENT}", 1) 
          clientb.s= Mid(Nachricht,sytxC+8,sytxC2-9)  
          clientend=Len(clientb)
          clientstart=FindString(clientb,"{/CLIENT}",1)
          clientbb.s=Mid(clientb,clientstart,clientend)
          client.s=RemoveString(clientb,clientbb,1) :Debug client
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Aus einem String Teile herausfiltern

Beitrag von Kiffi »

> habe ich mir das ausgedacht:

Code: Alles auswählen

{ROOM}TestRoom{/ROOM}{CLIENT}PIMP{/CLIENT}{MESSAGE}TEST{/MESSAGE}{FONT}ARIAL{/FONT}{COLOR}black{/COLOR}{BGCOLOR}green{/BGCOLOR}{SIZE}26{/SIZE}
wieso ein propietäres Format entwickeln, wenn's sowas ähnliches schon gibt:

Code: Alles auswählen

<ROOM>TestRoom</ROOM><CLIENT>PIMP</CLIENT>[...]
Du brauchst also nur die geschweiften Klammern durch spitze zu ersetzen.
Das nennt sich dann XML :)

Grüße ... Kiffi

P.S.: Die entsprechende Userlib zum Parsen von XML gibt's in ein paar
Tagen.
Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Beitrag von MJP »

Was ist XML??
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

[offtopic]
was habt ihr denn alle gegen das gute alte Byte protokoll :freak: ? Ist doch wesentlich effektiver und ist kleiner im Packet und kann somit schneller versand werden.
[/offtopic]
Bild
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Ist doch wesentlich effektiver und ist kleiner im Packet und kann somit
> schneller versand werden.

kleiner: mag sein

effektiver: Ansichtssache. Definiere 'effektiv'. Spätestens, wenn Du die Daten
komfortabel weiterverarbeiten möchtest, wird so ein selbstgefriemelter
propietärer Bytecode schnell zur Entwicklungsbremse.

Grüße ... Kiffi
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Kiffi hat geschrieben:> Ist doch wesentlich effektiver und ist kleiner im Packet und kann somit
> schneller versand werden.

kleiner: mag sein

effektiver: Ansichtssache. Definiere 'effektiv'. Spätestens, wenn Du die Daten
komfortabel weiterverarbeiten möchtest, wird so ein selbstgefriemelter
propietärer Bytecode schnell zur Entwicklungsbremse.

Grüße ... Kiffi
Nicht unbedingt. Wenn du vorher eine anständige Form für ein Paket hast und dann alle Befehle auf Papier notierst kann das ziehmlich Vorteilhaft sein. Außerdem kann man mit einer richtigen Paket basis sogar überprüfen, ob ein Paket fehlerhaft ist. Die Möglichkeiten sind grenzenlos. Ich würde eher behaupten, dass nur diese Programmierart auf dauer die Entwicklung beschleunigen kann. So kann man z.b. auch ein sicheres Log-In System aufbauen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Wenn du vorher eine anständige Form für ein Paket hast und dann alle
> Befehle auf Papier notierst kann das ziehmlich Vorteilhaft sein.

siehst Du: mit XML muss man noch nicht einmal irgendwas notieren, weil
die Daten im Klartext inklusive Beschreibung vorhanden sind. ;)

> Außerdem kann man mit einer richtigen Paket basis sogar überprüfen,
> ob ein Paket fehlerhaft ist.

dito mit XML. Hier muss man allerdings nicht selber prüfen. Das macht der
Parser von ganz alleine.

> Ich würde eher behaupten, dass nur diese Programmierart auf dauer die
> Entwicklung beschleunigen kann.

ich habe gegenteilige Erfahrungen gemacht.

Grüße ... Kiffi
Antworten