"The input string was not in an incorrect format" when filtering array

0

After sending a string that is a command keyword to my Arduino via the serial port, I am trying to get values in an application in C #, and a certain string and puts them in two different arrays using regular expressions, however this giving the following error in the red mark in the code below: "The input string was not in an incorrect format." Follow the code below: If you can help, thank you.

void SerialPort1DataReceived(object sender, SerialDataReceivedEventArgs e) {

    RxString += serialPort1.ReadExisting(); //le o dado disponível na serial.Sempre recebe os dados adicionandono final do buffer
    if (RxString.StartsWith("@")) {
        this.Invoke(new EventHandler(trataDadoRecebidoComandSimples)); //chama outra thread para escrever o feedback de comando realizado com sucesso no text box
    }
    if (RxString.StartsWith("#")) {
        this.Invoke(new EventHandler(trataDadoRecebidoComandDistancia)); //chama outra thread para escrever o feedback de comando realizado com sucesso no text box
    }
}
public void limpaStringComandos() {

}

public void trataDadoRecebidoComandSimples(object sender, EventArgs e) {
    //depois de receber os dados verifica se possui uma mensagem completa nele, ou seja, o feedback do arduino que o comando foi realizado com sucesso. Ex: Navio 01 Leme a vante executado com sucesso - (OKNULAV)
    //devemos fazer isso em um loop pois pode acontecer de chegar mais de uma mensagem ao mesmo tempo

    int identificador = 0;
    while ((identificador = RxString.IndexOf('@')) >= 0) {
        txtMonitor.Text = RxString;
        //separamos a primeira mensagem do identificador sem o delimitador
        string mensagem = RxString.Substring(0, identificador);
        //tratamos ela da forma que for necessário, no caso, alimentar o txtDistancia com a informação limpa de acumulos de dados.
        txtStatus.Text = mensagem;
        //por fim removemos ela do buffer
        RxString = RxString.Substring(identificador + 1);
    }

}
public void trataDadoRecebidoComandDistancia(object sender, EventArgs e) {
    int identificador = 0;
    while ((identificador = RxString.IndexOf('#')) >= 0) {
        string patternDistancia = @ "^\#[A-Z]{1,7}\r\n\#[A-Z]{1,9}\#"; //Retira os caracteres excedentes e deixa no array somente "numero#" ex.: 17#17#18#...
        string patternDistanciaRetorno = @ "^\#[A-Z]{1,7}([0-9]{1,3}\#){10}"; //Retira os caracteres excedentes e deixa no array somente "#feedback do Arduino#" ex.: #OKNUSAPRO#
        Match m = Regex.Match(RxString, patternDistancia);
        while (m.Success) {
            m = m.NextMatch();
        }
        string[] SDistancia = Regex.Split(RxString, patternDistancia, RegexOptions.IgnoreCase);
        string[] SRetorno = Regex.Split(RxString, patternDistanciaRetorno, RegexOptions.IgnoreCase);
        string SString = string.Concat(SDistancia);
        string SStringRetorno = string.Concat(SRetorno);
        String[] SVetor = SString.Split('#');
        int cont = 0;
        int media = 0;
        int soma = 0;
        for (int n = 0; n <= 9; n++) {
            cont = cont + 1; * * int caracter = Int32.Parse(SVetor[n]); // aqui ocorre o erro**
            soma += Convert.ToInt32(caracter);
        }
        media = soma / cont;
        txtDistancia.Text = media.ToString();
        txtMonitor.Text = RxString;
        //separamos a primeira mensagem do identificador sem o delimitador
        string mensagem = SStringRetorno.Substring(0, identificador);
        //tratamos ela da forma que for necessário, no caso, alimentar o txtDistancia com a informação limpa de acumulos de dados.
        txtStatus.Text = mensagem;
        //por fim removemos ela do buffer
        SStringRetorno = SStringRetorno.Substring(identificador + 1);
    }
}
    
asked by anonymous 18.01.2016 / 21:17

1 answer

4

That means you're trying to convert to int some string other than a number . You just have to check your string carefully and you will discover the error.

Try debugging the code, showing the value on the screen or the console ( Console.WriteLine() ) before converting it will be much easier to find the cause of the error.

About the error message

The error message in Portuguese is a bit of an idiot and the worst of it is that it has been this way since I know .NET.

The message:

  

The input string was not in an incorrect format

In fact, it should be

  

The input string was not in a correct format

The original message is:

  

Input string was not in a correct format

    
19.01.2016 / 12:18