0,2 1023,1023 1023,1023 1023,1023
1,5 1023,1023 1023,1023 1023,1023
2,8 1023,1023 1023,1023 1023,1023
3,11 1023,1023 1023,1023 1023,1023
4,14 1023,1023 1023,1023 1023,1023
5,17 1023,1023 1023,1023 1023,1023
这里基本上微控制器向我发送[x1,y1 x2,y2 x3,y3 x4,y4]格式的四个不同点的坐标
现在我感兴趣的是只使用第一对坐标,可能会保存在两个不同的数组x1和y1中。然后我想将这两个坐标用作屏幕坐标。
Public Class Form1
Public Delegate Sub myDelegate()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sp1.Open()
End Sub
Public Sub updateTextBox()
Dim strarr(8) As String
Dim str1 As String
str1 = sp1.ReadLine
txtreceive.AppendText(str1)
strarr = str1.Split(",")
Dim x1 As Double
x1 = Val(strarr(0))
MsgBox(x1)
txtreceive.ScrollToCaret()
End Sub
Private Sub sp1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles sp1.DataReceived
txtreceive.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
End Sub
Private Sub txtreceive_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtreceive.TextChanged
End Sub
End Class
这里我得到第一对的x坐标,但每当我试图从第一对得到y1时,我都会收到错误。它说“索引超出了数组的范围”。现在,如果有其他方式获取数据,请建议我。谢谢
答案 0 :(得分:1)
这里有两个分隔符:
如果您在JUST逗号上拆分,您的元素将与键入的内容相同:
strarr(0) = "0"
strarr(1) = "2 1023"
strarr(2) = "1023 1023"
strarr(3) = "1023 1023"
strarr(4) = "1023"
如果你想要所有四对,首先拆分空格,然后用逗号分隔四个结果字符串中的每一个。
由于您只想要第一对,请在第一个空格处截断字符串,然后在逗号上将其拆分,如下所示。
Public Sub updateTextBox()
Dim strarr() As String
Dim str1 As String
str1 = sp1.ReadLine
' NEW: truncate str1 at the first space
str1 = str1.SubString(0, str1.IndexOf(" ") -1)
txtreceive.AppendText(str1)
strarr = str1.Split(",")
Dim x1 As Double
Dim y1 As Double
x1 = Val(strarr(0))
y1 = Val(strarr(1))
MsgBox(x1 & ", " & y1)
txtreceive.ScrollToCaret()
End Sub
答案 1 :(得分:0)
string.split()
将返回正确大小的数组,因此您声明它:
Dim strarr(8) As String
是多余的。
以下代码应该在逗号上拆分字符串。
Dim strarr() As String
strarr = str1.Split(",")
仔细检查字符串是否按预期分割。索引1被报告为越界的事实意味着字符串未被正确分割,因为它不是您期望的格式。
使用调试器或消息框验证您刚刚读取的数据行的格式是:
0,2 1023,1023 1023,1023 1023,1023
如果您正在获取其他数据,那么最简单的方法是首先检查string.Split
返回的内容。
你说的第一行是:
从机地址:0xB0初始化成功!
在这种情况下,数组只有一个长,因为此字符串中没有逗号。
但是,你还有另一个问题,你需要首先拆分空格以获得坐标数组,然后在逗号上拆分 。所以首先你需要:
strarr = str1.Split(" ")
给你:
strarr(0) = "0,2"
strarr(1) = "1023,1023"
strarr(2) = "1023,1023"
strarr(3) = "1023,1023"
接下来,检查这个长度是否正确 - 4然后将第一个元素拆分为逗号。
然后,如果这导致长度为2的数组,则使用TryParse
来执行字符串 - >双重转换。如果字符串不是数值,这将失败安全。然后你可以使用你的双值。
如果当前行未通过这些测试,则只需读取下一行并重复。