2015-05-18 5 views
0

Мне нужно, чтобы разобрать эту строку из последовательного: -Разбираем уникальную строку из сложной последовательной передачи данных C#

!00037,[email protected] 

00037 в одну строку, 00055 в качестве другой строки

Однако эта строка вышла, когда шина робота вращается, а другая строка также может отображаться до и после строки, которую мне нужно проанализировать. Например, это часть передачи полученных: -

11,[email protected]!00011,[email protected]!00001,[email protected]!00001,[email protected]!00003,[email protected]!00006,[email protected]!00009,[email protected]!00011,[email protected]!00011,[email protected]!00011,[email protected]!00001,[email protected]!00001,[email protected]!00003,[email protected]!00006,[email protected]!00009,[email protected]!00011,[email protected]!00001,[email protected]!00003,[email protected]!00006,[email protected]!00009,[email protected]!00011,[email protected]!00037,[email protected]!00023,[email protected]!00022,[email protected]!00011,[email protected]!00011,[email protected]!00001,[email protected]!00001,[email protected]!00003,[email protected]!00006,[email protected]!00009,[email protected]!00011,[email protected]!00037,[email protected]!00023,[email protected]!00022,[email protected]!00011,[email protected]!00011,[email protected]!00001,[email protected] 

До сих пор я застрял на том, что делать дальше после SerialPort.ReadExisting()

Вот код для получения последовательных данных: -

private void serialCom_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    try 
    { 
     InputData = serialCom.ReadExisting(); 
     if (InputData != String.Empty) 
     { 
      this.BeginInvoke(new SetTextCallback(IncomingData), new object[] { InputData }); 
     } 
    } 
    catch 
    { 
     MessageBox.Show("Error"); 
    } 
} 

и дисплей входящие последовательные данные внутри текстового поля

private void IncomingData(string data) 
{   
    tb_incomingData.AppendText(data); 
    tb_incomingData.ScrollToCaret();    
} 

Этот код USI ng .NET Framework 4.0 и Windows Form.

+0

Вам нужны все строки, которые соответствуют '! #####, ##### @' или только один? –

+0

yes @EBrown .. Мне нужны все строки, которые соответствуют! #####, ##### @, так как он обновляет вращение шины –

+0

Вы можете использовать выражение регулярного выражения, подобное '! ([0-9]). + (, [0-9] {5} @) ', чтобы обрезать строки, входящие в последовательный отчет. Примечание. Я не очень хорошо разбираюсь в регулярном выражении, поэтому, вероятно, есть лучший способ написать это. –

ответ

1

Наконец решить с помощью IndexOf и подстроки.

private void IncomingData(string data) 
{ 
    //Show received data in textbox 
    tb_incomingData.AppendText(data); 
    tb_incomingData.ScrollToCaret(); 

    //Append data inside longdata (string) 
    longData = longData + data; 
    if (longData.Contains('@') && longData.Contains(',') && longData.Contains('!')) 
    { 
    try 
    { 
     indexSeru = longData.IndexOf('!'); //retrieve index number of the symbol ! 
     indexComma = longData.IndexOf(','); //retrieve index number of the symbol , 
     indexAlias = longData.IndexOf('@'); //retrieve index number of the symbol , 
     rotation = longData.Substring(indexSeru + 1, 5); //first string is taken after symbol ! and 5 next char 
     subRotation = longData.Substring(indexComma + 1, 5); //second string is taken after symbol ! and 5 next char 
     //tss_distance.Text = rotation + "," + subRotation; 
     longData = null; //clear longdata string  
    } 
    catch 
    { 
     indexSeru = 0; 
     indexComma = 0; 
     indexAlias = 0; 
    } 
    } 
} 
0

Вы можете определить свой шаблон, чтобы преобразовать эту строку в массив, используя функцию SPLIT. "! 00037,00055 @"

Этот код, отправь возвращает два itens: 00037 и 00055.

static void Main(string[] args) 
    { 
     string k = "!00037,[email protected]"; 
     var array = k.ToString().Split(','); 
     Console.WriteLine("Dirty Itens"); 
     for (var x = 0; x <= array.Length - 1; x++) 
     { 
      var linha = "Item " + x.ToString() + " = " + array[x]; 
      Console.WriteLine(linha); 
     } 
     Console.WriteLine("Cleaned Itens"); 
     for (var x = 0; x <= array.Length - 1; x++) 
     { 
      var linha = "Item " + x.ToString() + " = " + CleanString(array[x]); 
      Console.WriteLine(linha); 
     } 
     Console.ReadLine(); 

    } 

    public static string CleanString(string inputString) 
    { 
     string resultString = ""; 
     Regex regexObj = new Regex(@"[^\d]"); 
     resultString = regexObj.Replace(inputString, ""); 
     return resultString;    
    } 
+0

Он спрашивает, как получить эту строку, хотя из входящие последовательные данные. –

Смежные вопросы