我有传入的串行数据,如下面的截图。 我想将数据从richtextbox(其中包含任何字符串)拆分到另一个文本框(richtextbox下面的文本框)。但是我只接受它们中的任何一部分,实际上是在C之后的字符串。我想删除12个第一个字符串,然后将它们放到另一个文本框中。
仅供参考,我的程序是RFID阅读器,这就是我的程序的工作方式:
当我点击select tag send时,serial会发送数据并将它们放到richTextBox中。 例如,数据是01018200000C000000000000000000000003,我想要000000000000000000000003转到另一个文本框(因为这是标签ID,而它之前的字符是消息详细信息)。 之后我点击发送,下一个数据将显示在richTextBox上,然后最新的标签ID将替换textBox中的第一个标签ID,依此类推。
如果来自串口的数据没有错误,它总会发送给我这样的格式,我只需要抓取标签ID,这就是我需要删除前12个字符的原因。但如果错误序列只发送给我4个字符。
任何人都知道简单的方法吗? 我尝试了一些代码,但仍然有错误 这是我的代码:
private void SetText(string text)
{
if (this.rtbIncoming.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
string[] newData = text.Split('C');
tagBox.Text = newData[1];
}
this.rtbIncoming.Text += text;
}
编辑:
在进一步调查之后,我收到的数据有误,在我确保收到适当的数据后,我认为所有的答案都适用于我。但我选择Pranav-BitWiser的答案来跳过数据,因为如果标签ID上有'C'字符,那么在'C'字符处使用split会更加困难。 感谢您的回答,这真的很有帮助:))
答案 0 :(得分:2)
试试这个,
string data = "01018200000c000000000000000000000003"; string[] splitdata = data.Split('c'); textBox2.Text = splitdata[1].ToString();
答案 1 :(得分:1)
如果修复了12个字符,您可以使用substring
String input = "01018200000c000000000000000000000003";
String portion = input.Substring(13); // Note the 0 based index
Console.WriteLine(portion); // Verify test
现在,您可以在所需的文本框中使用portion
textbox_one.Text = portion;
编辑:如果您的字符串不是固定长度,请尝试这样的事情[采取相同的格式] +将确定错误状态
引用:
如果序列中的数据没有错误,它将始终发送给我这样的格式,我只需要获取标签ID,这就是为什么我需要删除前12个字符的原因。但如果错误序列只发送给我4个字符。
建议:
String input = "01018200000c000000000000000000000003"; // This is input you get
String portion;
if(input.Length > 4){
if(input.IndexOf("c")!=0){
portion = input.Substring(input.IndexOf("c")+1); // Note the 0 based index
Console.WriteLine(portion); // Verify test
textbox_one.Text = portion;
}
else{
// Not a valid tag
textbox_one.Text = "Error Tag :" + input;
}
}
答案 2 :(得分:1)
如果您想要始终从字符串中删除前12个字符,那么您可以使用:
string data = "01018200000c000000000000000000000003";
TextBoxID.Text= data.Remove(0, 12);
OR
TextBoxID.Text = new string(data.Skip(12).ToArray());
此处 - TextBoxID
是TextBox的ID
答案 3 :(得分:0)
试试这个:
string serialData;
serialData = "01018200000C000000000000000000000003";
textBox.Text = serialData.Split('C')[1];
serialData = //Your new serial data here
textBox.Text = serialData.Split('C')[1];
我希望分裂功能有所帮助。只有当你的字符串有一个" C"时,这才有效。如果它有多个C,它会在字符串中出现C的地方分割。您能否确认您的字符串是否只有一个C或多个C?