拆分并删除一些数据到另一个文本框

时间:2015-02-10 05:40:17

标签: c#

我有传入的串行数据,如下面的截图。 我想将数据从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;

    }

enter image description here

编辑:

在进一步调查之后,我收到的数据有误,在我确保收到适当的数据后,我认为所有的答案都适用于我。但我选择Pranav-BitWiser的答案来跳过数据,因为如果标签ID上有'C'字符,那么在'C'字符处使用split会更加困难。 感谢您的回答,这真的很有帮助:))

4 个答案:

答案 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?