String filtern (BASCOM BASIC)

Gast #800311
Lesenswert?

Hallo

Ich habe folgendes Problem:
Ich habe einen String, der folgendermaßen aussieht:

<A><C><K><CR><1><SP><1><SP><8><7><SP><1><4><3><CR>

Jedes Zeichen in < > sind ASCII-Zeichen, darunter auch 2 nicht-druckbare 
(CR und SP).

Ich will nun die Zahlen aus dem String herausfiltern und jede Zahl in 
einer extra Stringvariablen abspeichern. Das Problem welches nun 
hinzukommt ist, dass die Zahlen nicht fix sind, alle anderen Zeichen 
jedoch schon.

Sprich, der String könnte auch so aussehen:

<A><C><K><CR><1><3><SP><4><1><SP><1><8><7><SP><4><3><CR>


Ich habe schon eine gute Weile überlegt aber eine richtig gute 
Angehensweise habe ich nicht gefunden. Meine Lösung wäre, die ersten 3 
Zeichen erstmal wegzuschneiden (<A><C><K><CR>) und dann für jedes 
Zeichen extra eine Fallunterscheidung zu machen ob es eine Zahl ist.

Aber vielleicht weis ja einer on euch wie es einfacher geht :)
Gast #800536
Lesenswert?

Hallo

Ich bin die Sache nun folgendermaßen angegangen, hier der Code:

Definitionen:
1
Dim received_char_len As Byte
2
Dim schleifenvar As Byte
3
Dim received_char_split As String * 1
4
Dim Cmu_vw_array As String * 30

1
  '***** String filtern*****
2
  received_char_len = Len(received_char)
3
  received_char_len = received_char_len - 1     'wegen dem <CR> am Ende
4

5
  For schleifenvar = 5 To received_char_len
6
    received_char_split = Mid(received_char , schleifenvar , 1)
7

8
    Select Case received_char_split
9
       Case "0" : Mid(cmu_vw_array , schleifenvar , 1) = "0"
10
                   Print #2 , "0";              'Zur Kontrolle
11
       Case "1" : Mid(cmu_vw_array , schleifenvar , 1) = "1"
12
                   Print #2 , "1";
13
       Case "2" : Mid(cmu_vw_array , schleifenvar , 1) = "2"
14
                   Print #2 , "2";
15
       Case "3" : Mid(cmu_vw_array , schleifenvar , 1) = "3"
16
                   Print #2 , "3";
17
       Case "4" : Mid(cmu_vw_array , schleifenvar , 1) = "4"
18
                   Print #2 , "4";
19
       Case "5" : Mid(cmu_vw_array , schleifenvar , 1) = "5"
20
                   Print #2 , "5";
21
       Case "6" : Mid(cmu_vw_array , schleifenvar , 1) = "6"
22
                   Print #2 , "6";
23
       Case "7" : Mid(cmu_vw_array , schleifenvar , 1) = "7"
24
                   Print #2 , "7";
25
       Case "8" : Mid(cmu_vw_array , schleifenvar , 1) = "8"
26
                   Print #2 , "8";
27
       Case "9" : Mid(cmu_vw_array , schleifenvar , 1) = "9"
28
                   Print #2 , "9";
29
      Case Else : Mid(cmu_vw_array , schleifenvar , 1) = " "
30
                   Print #2 , " ";
31
   End Select
32

33
   Waitus 10
34
 Next schleifenvar

Die Variable cmu_vw_array soll später die einzelnen Zahlen in einem 
String speichern und sie mit einem Leerzeichen trennen.

Wenn ich mir mit dem Logic Analyzer die Print-Befehle anschaue passt das 
soweit. Aber die Zuweisung

Mid(cmu_vw_array , schleifenvar , 1) = "9"

funktioniert nicht. Da bekomme ich nichts brauchbares zusammen...
Wie kann ich das umschreiben?
Gast #800847
Lesenswert?

>Mid(cmu_vw_array , schleifenvar , 1) = "9"

kann auch nicht gehen, da MID 1 Zeichen des cmu_vw_array an der Stelle 
schleifenvar zurückliefert. Es setzt keine Strings zusammen.

Das einfachste wäre so:

for i = 1 to received_char_len
    if mid(received_char,i,1) >= "0" and mid(received_char,i,1) <="9" 
then cmu_vw_array = cmu_vw_array + mid(received_char,i,1)
next i

Zumindest funktioniert das so oder ähnlich in verschiedenen 
PC-Basic-Dialekten.
Du solltest dir die Stringverarbeitung von Bascom mal ansehen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren