Seite 1 von 3

Daten aufteilen

Verfasst: 17.08.2008 19:22
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

Verfasst: 17.08.2008 19:26
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... 

Verfasst: 17.08.2008 19:28
von TobiasR
Super, herzlichen Dank für die schnelle Antwort!

Verfasst: 17.08.2008 19:30
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

Verfasst: 17.08.2008 19:53
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?

Verfasst: 17.08.2008 19:57
von rolaf
StringGadget(#String_11, 455, 490, 70, 25, Str(V(1))) :allright:

Verfasst: 17.08.2008 19:57
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.

Verfasst: 17.08.2008 20:02
von TobiasR
Super, Danke!

Verfasst: 17.08.2008 21:27
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.

Verfasst: 17.08.2008 21:53
von edel
naja, hier ist regex aber overkill ...