PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : String verarbeiten



king-sixXx
11.11.2005, 22:56
Hallo Leute!

Ich schicke über die RS323 ein ständig ein Steuersignal das wie folgt aufgebaut ist:

*startzeichen*DATA1;DATA2;DATA3*endzeichen*

Wie kann ich unter Bascom dieses Steuersignal in eine Variable bekommen?

ich hab mir so was vorgestellt:

Zeichen einlesen
wenn Zeichen = startzeichen dann
loop
zeichen einlesen
data = data + zeichen
end wenn zeichen = endzeichen
aufteilen
end

Freu mich auf eure Antworten. Besonders in Quellcodeform :-)
Vielen Dank!

Ruppi
12.11.2005, 10:52
Hi,
ich würde einfach alles einlesen, was kommt und nur nach dem endzeichen suchen, also wenn Endzeichen, dann Auswertung. Aber Deine Variante sollte auch klappen. Achte nur darauf, dass Du nicht zu viel Code in den Empfangsinterrupt packst, das kann sehr oft Probleme geben.
Wenn's nicht klappt, nochmal melden!

Ruppi

king-sixXx
12.11.2005, 13:13
Hat geklappt!
Ich hab alles in einer Variablen zusammen. Nur wie kann ich diese jetzt in mehrere aufteilen?

in VB ging das mit der funktion split etwa so:

dim A() as string
dim variable as string
variable = "erster Teil;zweiter Teil"

a = split(variable, ";")

a(1) enthält nun "erster Teil"
a(2) enthält nun "zweiter Teil"

gibt es so was auch unter Bascom, oder wie kann ich das anstellen?
MFG!

emulein
12.11.2005, 20:11
Hallo,

schau dir mal unter BASCOM den Befehl MID und LEN an damit sollte das gehen.

Gruss Frank

king-sixXx
12.11.2005, 22:56
Hallo Frank!
Die beiden Befehle sind mir bekannt. Leider lässt ich mit denen nicht ermitteln, an welcher stelle das Trennzeichen steht. Dann muss ich eben mit fester Länge des Datensatzes arbeiten. Dann kann ich auch MID und LEN benutzen. Vielen Dank!

PicNick
13.11.2005, 09:10
Dim Instring As String * 63 ' eingabe
Dim Strings(5) As String * 15 ' fünf strings
Dim Char As String * 1 ' ein zeichen
Dim Par As Byte ' string-Nummer 1-5
Dim Idx As Byte ' zeichen-# im string

Instring = "eins;zwei;drei;vier"
Par = 1
For Idx = 1 To Len(instring)
Char = Mid(instring , Idx , 1)
If Char = ";" Then
Incr Par
Else
Strings(par) = Strings(par) + Char
End If
Next

king-sixXx
13.11.2005, 10:22
Wow darauf wäre ich nicht gekommen. Gute Idee, das mit einer Schleife zu machen! Dankeschön!

PicNick
13.11.2005, 11:12
Bitteerscheen.
Nicht vergessen, wenn du das ein weiteres mal machen willst, solltest du die strings(1-bis-5) auf "leer" setzen

For Par = 1 To 5
Strings(Par) = ""
Next