"Input string was not in an incorrect format" when filtering array

Asked

Viewed 1,178 times

0

After sending a String that is a command keyword to my Arduino through the serial port, I’m trying to take values in a C#application, and a certain string and put them in two different arrays using regular expressions, however this giving the following error in the red tag 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);
    }
}
  • Can you tell a what part of the code occurs this error? to summarize a bit the problem.

  • I didn’t understand the part about Match m = Regex.Match(RxString, patternDistancia);, out inside the while, m is not used.

  • At this point in the code, inside this is: for (int n = 0; n <= 9; n++) { cont = cont + 1; * int character = Int32.Parse(Svetor[n]); // here is the error** sum += Convert.Toint32(character); }

  • Guilherme, in this case this match is only to check if the string enters the parameters you put in the regular expression. But I already commented on this part of the code and gave the same error.

  • 1

1 answer

4

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

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


About the error message

The error message in Portuguese is kind of stupid and the worst is that it is like this since I know . NET.

The message:

The input character string was not in an incorrect format

In fact, it should be

The input character string was not in a format correct

The original message is:

Input string was not in a correct format

Browser other questions tagged

You are not signed in. Login or sign up in order to post.