Irgendwie habe ich hier ein Denkfehler drin.
Ich sammle Daten die aufeinanderfolgend rein kommen. (Serielle Schnittstelle)
Eine Datenzeile besteht aus start tab wert new line
Dieses Reihen möchte ich in eine Liste außer dieses New Line Zeichen sammeln.
Beim verarbeiten gehe ich dann die Reihen durch und zerlege die nach Tab Zeichen
und übertrage die Werte in eine Struktur.
Manchmal kommt es vor das ich kein gültigen Wert habe wenn ich die Liste verarbeite, das verstehe ich nicht.
Die andere Seite auf dem Arduino macht das hier:
Meine Klasse die die Daten sammeln soll und als Zeilen in die Liste fügt.
Ich sammle Daten die aufeinanderfolgend rein kommen. (Serielle Schnittstelle)
Eine Datenzeile besteht aus start tab wert new line
Dieses Reihen möchte ich in eine Liste außer dieses New Line Zeichen sammeln.
Beim verarbeiten gehe ich dann die Reihen durch und zerlege die nach Tab Zeichen
und übertrage die Werte in eine Struktur.
Manchmal kommt es vor das ich kein gültigen Wert habe wenn ich die Liste verarbeite, das verstehe ich nicht.
Die andere Seite auf dem Arduino macht das hier:
B4X:
String row = "start\t" + String(valuea);
bt.println(row);
Meine Klasse die die Daten sammeln soll und als Zeilen in die Liste fügt.
B4X:
Sub Class_Globals
Dim InputBuffer As String
Public List As List
End Sub
'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize
InputBuffer = ""
List.Initialize
List.Clear
End Sub
Public Sub Collect(Data As String)
'Log("Collect: '" & Data & "'")
InputBuffer = InputBuffer & Data
Dim x,x1,x2 As Int
x = InputBuffer.IndexOf("start")
If x > 0 Then InputBuffer = InputBuffer.SubString(x) 'mit start fängt die reihe an
If InputBuffer.StartsWith("start") = False Then InputBuffer="" 'ungültiger anfang
x1 = InputBuffer.IndexOf("start")
x2 = InputBuffer.IndexOf(CRLF)
If x1>=0 And x2 > x1 Then 'mindestens eine reihe mit start und chr(10)
Dim Row As String = InputBuffer.SubString2(0,x2) 'bis ohne Zeilenumbruch merken
List.Add(Row)
InputBuffer = InputBuffer.SubString(x2+1) 'kürzen vorne was ausgelesen wurde weg
Collect("") 'das soll den Rest zerlegen
End If
End Sub
Public Sub Test
Collect("234234")
Collect("start" & TAB)
Collect("123")
Collect(CRLF)
Collect("start" & TAB)
Collect("456" & CRLF)
Collect("start" & TAB)
For Each Row As String In List
Log(Row)
Next
InputBuffer = ""
List.Clear
End Sub
Last edited: