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 :)
Wenn deine Zahl immer eine feste Position hat würde ich sagen mit MID Befehl die Zahl auschneiden. http://www.comwebnet.de - Bascom AVR Projekte
hi, die sprache dabei ist eigentlich egal, du kannst die einzelnen strings innerhalb der klammern mit der funktion 'val(string)' auf ihren numerischen wert untersuchen, dann bekommst du raus, welcher einer zahl entspricht. grüssens, harry
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?
>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...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.