P Pepebis Member Licensed User Longtime User Dec 26, 2019 #1 Dear All, I'm receiving two strings form RPi . One is with Temperature second with humidity. Strings are like this for example: T30.3 and for humidity H22.1 . I don't know how I supposed divide those strings and send them on gauges. Any idea? Best Regards, Semek
Dear All, I'm receiving two strings form RPi . One is with Temperature second with humidity. Strings are like this for example: T30.3 and for humidity H22.1 . I don't know how I supposed divide those strings and send them on gauges. Any idea? Best Regards, Semek
stevel05 Expert Licensed User Longtime User Dec 26, 2019 #2 If the identifying character always has a length of 1 then you can use Substring : Dim Val As Double = Str.Substring(1) Casting is taken care of automatically Upvote 0
If the identifying character always has a length of 1 then you can use Substring : Dim Val As Double = Str.Substring(1) Casting is taken care of automatically
stevel05 Expert Licensed User Longtime User Dec 26, 2019 #3 Or to be a little clearer: B4X: Dim Str As String = "T3.1" Dim Temp, Humid As Double If Str.StartsWith("T") Then Temp = Str.SubString(1) If Str.StartsWith("H") Then Humid = Str.SubString(1) Or B4X: Dim Str As String = "T3.1" Dim Temp, Humid As Double If Str.CharAt(0) = "T" Then Temp = Str.SubString(1) If Str.CharAt(0) = "H" Then Humid = Str.SubString(1) Upvote 0
Or to be a little clearer: B4X: Dim Str As String = "T3.1" Dim Temp, Humid As Double If Str.StartsWith("T") Then Temp = Str.SubString(1) If Str.StartsWith("H") Then Humid = Str.SubString(1) Or B4X: Dim Str As String = "T3.1" Dim Temp, Humid As Double If Str.CharAt(0) = "T" Then Temp = Str.SubString(1) If Str.CharAt(0) = "H" Then Humid = Str.SubString(1)
P Pepebis Member Licensed User Longtime User Dec 26, 2019 #4 Hi . It depends on me in what form I will send strings from rpi . Sub udpsrv_PacketArrived (Packet As UDPPacket) Dim msg As String msg = BytesToString(Packet.Data,Packet.Offset,Packet.Length, "UTF8" ) End Sub . I'm receiving packages but can't divide them. Upvote 0
Hi . It depends on me in what form I will send strings from rpi . Sub udpsrv_PacketArrived (Packet As UDPPacket) Dim msg As String msg = BytesToString(Packet.Data,Packet.Offset,Packet.Length, "UTF8" ) End Sub . I'm receiving packages but can't divide them.
stevel05 Expert Licensed User Longtime User Dec 26, 2019 #5 Ok, that is a slightly different question. How is the string you obtain from the packet formatted? Upvote 0
P Pepebis Member Licensed User Longtime User Dec 26, 2019 #6 I created two gauges using some of Earls libs. Data which im sending from Rpi is just string( numer in format ( for example 33.33) . But that is form one channel . Everything is working fine. But i want to format them cos want to send data from two channels and duno how to do this. Upvote 0
I created two gauges using some of Earls libs. Data which im sending from Rpi is just string( numer in format ( for example 33.33) . But that is form one channel . Everything is working fine. But i want to format them cos want to send data from two channels and duno how to do this.
stevel05 Expert Licensed User Longtime User Dec 26, 2019 #7 Will there only ever be 2 channels? or will you add more? Upvote 0
stevel05 Expert Licensed User Longtime User Dec 26, 2019 #9 Ok if you are sending the string then you don't need to add an identifier as you know the order of the data. If you Format the string as "TempVal,HumidVal" you can do: B4X: Dim str As String = "30.3,22.1" 'Received string Dim Pos As Int = str.IndexOf(",") Dim Temp As Double = str.SubString2(0,Pos) Dim Humid As Double = str.SubString(Pos + 1) Log(Temp) Log(Humid) Upvote 0
Ok if you are sending the string then you don't need to add an identifier as you know the order of the data. If you Format the string as "TempVal,HumidVal" you can do: B4X: Dim str As String = "30.3,22.1" 'Received string Dim Pos As Int = str.IndexOf(",") Dim Temp As Double = str.SubString2(0,Pos) Dim Humid As Double = str.SubString(Pos + 1) Log(Temp) Log(Humid)
P Pepebis Member Licensed User Longtime User Dec 26, 2019 #10 What I'm doing is I'm continuously ( every second ) sending strings to the app . one is tem another one is hum . The format is : for temp T22.3 for hum H33.4 ( for example ) I'm using this prefix to distinguish them . Just want to show value ( in this case 22.3 on one gauge and 33.4 on another ) . Best Regards, Semek Upvote 0
What I'm doing is I'm continuously ( every second ) sending strings to the app . one is tem another one is hum . The format is : for temp T22.3 for hum H33.4 ( for example ) I'm using this prefix to distinguish them . Just want to show value ( in this case 22.3 on one gauge and 33.4 on another ) . Best Regards, Semek
stevel05 Expert Licensed User Longtime User Dec 26, 2019 #11 In which case your answer is in post#3 Upvote 0
P Pepebis Member Licensed User Longtime User Dec 26, 2019 #12 Hi. I don't know. I have tried to crate as simple as possible test app . From your example but it is showing empty places in editText . Public Sub test Dim str As String = "30.3,22.1" 'Received string Dim Pos As Int = str.IndexOf(",") Dim Temp As Double = str.SubString2(0,Pos) Dim Humid As Double = str.SubString(Pos + 1) Log(Temp) Log(Humid) EditText1.Text = EditText1.Text&str EditText2.Text = EditText2.Text&Temp EditText3.Text = EditText3.Text&Humid End Sub Best Regards Upvote 0
Hi. I don't know. I have tried to crate as simple as possible test app . From your example but it is showing empty places in editText . Public Sub test Dim str As String = "30.3,22.1" 'Received string Dim Pos As Int = str.IndexOf(",") Dim Temp As Double = str.SubString2(0,Pos) Dim Humid As Double = str.SubString(Pos + 1) Log(Temp) Log(Humid) EditText1.Text = EditText1.Text&str EditText2.Text = EditText2.Text&Temp EditText3.Text = EditText3.Text&Humid End Sub Best Regards
M Mahares Expert Licensed User Longtime User Dec 26, 2019 #13 Code: Dim str As String = "30.3,22.1" 'Received string Dim strArray() As String =Regex.Split(",",str) Dim Temp As Double = strArray(0) Dim Humid As Double = strArray(1) Log(Temp) 'displays 30.3 Log(Humid) 'displays 22.1 Upvote 0
Code: Dim str As String = "30.3,22.1" 'Received string Dim strArray() As String =Regex.Split(",",str) Dim Temp As Double = strArray(0) Dim Humid As Double = strArray(1) Log(Temp) 'displays 30.3 Log(Humid) 'displays 22.1
stevel05 Expert Licensed User Longtime User Dec 26, 2019 #14 Mahares said: Dim str As String = "30.3,22.1" 'Received string Dim strArray() As String =Regex.Split(",",str) Dim Temp As Double = strArray(0) Dim Humid As Double = strArray(1) Log(Temp) 'displays 30.3 Log(Humid) 'displays 22.1 Click to expand... That would have been my suggestion if there had been a lot of parameters, I think Regex.Split is quite heavy and fairly slow compared to one or two string splits. Pepebis said: From your example but it is showing empty places in editText . Click to expand... It is going to depend on what is in the EditText's before you append the data. Presumably it's logging the values OK. Upvote 0
Mahares said: Dim str As String = "30.3,22.1" 'Received string Dim strArray() As String =Regex.Split(",",str) Dim Temp As Double = strArray(0) Dim Humid As Double = strArray(1) Log(Temp) 'displays 30.3 Log(Humid) 'displays 22.1 Click to expand... That would have been my suggestion if there had been a lot of parameters, I think Regex.Split is quite heavy and fairly slow compared to one or two string splits. Pepebis said: From your example but it is showing empty places in editText . Click to expand... It is going to depend on what is in the EditText's before you append the data. Presumably it's logging the values OK.
P Pepebis Member Licensed User Longtime User Dec 27, 2019 #15 Dear All, previous example posted by Steve : Dim str As String = "30.3,22.1" 'Received string Dim Pos As Int = str.IndexOf(",") Dim Temp As Double = str.SubString2(0,Pos) Dim Humid As Double = str.SubString(Pos + 1) Log(Temp) Log(Humid) Working perfectly. Thank you very much. Upvote 0
Dear All, previous example posted by Steve : Dim str As String = "30.3,22.1" 'Received string Dim Pos As Int = str.IndexOf(",") Dim Temp As Double = str.SubString2(0,Pos) Dim Humid As Double = str.SubString(Pos + 1) Log(Temp) Log(Humid) Working perfectly. Thank you very much.
kisoft Well-Known Member Licensed User Longtime User Dec 27, 2019 #16 HI And if you want to send more than two characters, regex is best: B4X: Dim str As String = "*31.1*32.2*33.3*34.4*" Dim str1,str2,str3,str4 As String Dim numbers() As String numbers = Regex.Split("\*", str) str1=numbers(1) str2=numbers(2) str3=numbers(3) str4=numbers(4) Upvote 0
HI And if you want to send more than two characters, regex is best: B4X: Dim str As String = "*31.1*32.2*33.3*34.4*" Dim str1,str2,str3,str4 As String Dim numbers() As String numbers = Regex.Split("\*", str) str1=numbers(1) str2=numbers(2) str3=numbers(3) str4=numbers(4)