I have a string that is received via BT that is of variable length.
Each string can be between 18 and 24 characters in length and has a Prefix character ($) and a suffix character (#).
The strings do not arrive individually, but can often be appended to each other.
I would like to be able to capture the each string between the Prefix character ($) and the suffix character (#), something like: "$..................#"
I have edited the astreams_NewData so that I can see the end of the string (#).
I have also tried:
But no success
ast_NewText:
astreams_NewData:
Each string can be between 18 and 24 characters in length and has a Prefix character ($) and a suffix character (#).
The strings do not arrive individually, but can often be appended to each other.
I would like to be able to capture the each string between the Prefix character ($) and the suffix character (#), something like: "$..................#"
I have edited the astreams_NewData so that I can see the end of the string (#).
I have also tried:
B4X:
Dim pos1, pos2 as Int
Dim newString as String
pos1 = strRX.IndexOf("$")
pos2 = strRX.IndexOf("#")
newString = (strRX.SubString2(pos1, pos2))
ast_NewText:
B4X:
Sub ast_NewText(strRX As String)
lblMonitor.Text = strRX
Dim sep1, sep2, sep3, sep4, sep5, sep6, sep7 As Int ' index of separators
Dim rackNo, zoneNo, alarmStatus, alarmSet, tempNow, setPoint As String
If strRX.StartsWith("$") Then
sep1 = strRX.IndexOf(",")
sep2 = strRX.IndexOf2(",", sep1 + 1)
sep3 = strRX.IndexOf2(",", sep2 + 1)
sep4 = strRX.IndexOf2(",", sep3 + 1)
sep5 = strRX.IndexOf2(",", sep4 + 1)
sep6 = strRX.IndexOf2(",", sep5 + 1)
sep7 = strRX.LastIndexOf(",")
rackNo = (strRX.SubString2(sep1 + 1, sep2))
zoneNo = (strRX.SubString2(sep2 + 1,sep3))
alarmStatus = (strRX.SubString2(sep3 + 1, sep4))
alarmSet = (strRX.SubString2(sep4 + 1,sep5))
tempNow = (strRX.SubString2(sep5 + 1,sep6))
setPoint = (strRX.SubString2(sep6 + 1, sep7))
End If
astreams_NewData:
B4X:
Private Sub astreams_NewData (Buffer() As Byte)
Dim newDataStart As Int = sb.Length
'Log ("newdatastart = " & newDataStart)
sb.Append(BytesToString(Buffer, 0, Buffer.Length, charset))
Dim s As String = sb.ToString
'Log("length of s = " & s.Length)
Dim start As Int = 0
For i = newDataStart To s.Length - 1
Dim c As Char = s.CharAt(i)
If i = 0 And c = Chr(35) Then '#
start = 1 'might be a broken end of line character
Continue
End If
If c = Chr(35) Then '#
CallSubDelayed2(mTarget, mEventName & "_NewText", s.SubString2(start, i))
start = i + 1
Else If c = Chr(13) Then '\r
CallSubDelayed2(mTarget, mEventName & "_NewText", s.SubString2(start, i))
If i < s.Length - 1 And s.CharAt(i + 1) = Chr(10) Then '\r\n
i = i + 1
End If
start = i + 1
End If
Next
' Main.LogMessage(s)
'Log("scl = " & sb)
If start > 0 Then sb.Remove(0, start)
End Sub