Daten aufteilen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
TobiasR
Beiträge: 19
Registriert: 16.08.2008 08:58
Wohnort: Nidda
Kontaktdaten:

Daten aufteilen

Beitrag von TobiasR »

Hallo,

ich stehe mal wieder vor einem Problem.
Über die serielle Schnittstelle erhalte ich folgenden Code:

0-0-28-24-0-1-0-105

Jede Zahl kann zwischen 1 und 3 Stellen haben. Sie sind immer durch einen - getrennt.

Ich möchte nun drei Varianlen V1, V2, V3, V4, V5, V6, V7 und V8 mit dem jeweiligen Zahlenwert füllen und breche mir ganz schön einen ab.
Sicher geht das ganz einfach
Kann mir jemand helfen?

Tobias
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

StringField()?

Code: Alles auswählen

string.s="0-0-28-24-0-1-0-105"

V1.s=StringField(string,1,"-")
V2.s=StringField(string,2,"-")
V3.s=StringField(string,3,"-")
V4.s=StringField(string,4,"-")
V5.s=StringField(string,5,"-")
V6.s=StringField(string,6,"-")
V7.s=StringField(string,7,"-")
V8.s=StringField(string,8,"-")
EDIT: Oder halt noch ein Val drumrum, wenn du damit rechnen willst

Code: Alles auswählen

V1=Val(StringField(string,1,"-")) ;usw... 
Benutzeravatar
TobiasR
Beiträge: 19
Registriert: 16.08.2008 08:58
Wohnort: Nidda
Kontaktdaten:

Beitrag von TobiasR »

Super, herzlichen Dank für die schnelle Antwort!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@TomS
du hast Val() vergessen

@TobiasR
für solche Fälle würde ich dir eher ein Array als getrennte Variablen empfehlen, das ist für viele Dinge praktischer.
Zum Beispiel kannst du schon beim Aufteilen eine Schleife benutzen.

Code: Alles auswählen

Dim V(8)

string.s="0-0-28-24-0-1-0-105"

For n=1 To 8
  V(n) = Val(StringField(string,n,"-"))
  Debug V(n)
Next
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TobiasR
Beiträge: 19
Registriert: 16.08.2008 08:58
Wohnort: Nidda
Kontaktdaten:

Beitrag von TobiasR »

Hallo,

die Idee mit dem Arry ist gut und ich wollte sie auch gleis ausprobieren.
Leider hackt das Programm jetzt

Code: Alles auswählen

string.s=auswertung.s

        For n=1 To 8
        V(n) = Val(StringField(string,n,"-"))
        Debug V(n)
        Next
                
       
        StringGadget(#String_11, 455, 490, 70, 25, V1)
Was mache ich da falsch?
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

StringGadget(#String_11, 455, 490, 70, 25, Str(V(1))) :allright:
Zuletzt geändert von rolaf am 17.08.2008 19:58, insgesamt 1-mal geändert.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

V1 ist weder definiert, noch ist es ein String.

mit
StringGadget(#String_11, 455, 490, 70, 25, Str(V(1)))
setzt du einen String der den Zahlenwert in V(1) darstellt ins Stringgadget.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TobiasR
Beiträge: 19
Registriert: 16.08.2008 08:58
Wohnort: Nidda
Kontaktdaten:

Beitrag von TobiasR »

Super, Danke!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

TobiasR hat geschrieben:die Idee mit dem Arry ist gut
Na dann darf ich dir ExtractRegularExpression() vorstellen:

Code: Alles auswählen

Dim V.s(0)
string.s="0-0-28-24-0-1-0-105" 

CreateRegularExpression(0, "\d+")
anzahl=ExtractRegularExpression(0, string, V())
FreeRegularExpression(0)

For n=0 To anzahl-1
	Debug V(n)
Next
Der Befehl gibt dem Array automatisch genau so viele Elemente, wie Zahlen gefunden werden, daher können wir ganz oben ruhig Dim V.s(0) schreiben.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

naja, hier ist regex aber overkill ...
Antworten