none
String split RRS feed

  • Pergunta

  • Pessoal

    preciso receber uma string pela serial e enviar esta string via udp.

    PP+0.280VPP-0.120VCP+0.207VPP+0.352VPP-0.095VPP+0.092VPP

    preciso quebrar esta string em:

    PP+0.280

    pp-0,120

    Pensei em utilizar o método SPLIT mas, estou tendo problemas para enviar via UDP pois estou encontrando dificuldades para enviar os dados. Segue meu código.

     string Rxquebrado;
                string[] split = RxString.Split('V');
                for (int i = 0; i < split.Length; i++)
                Rxquebrado = (split[i].ToString());

     Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                IPAddress serverAddr = IPAddress.Parse("192.168.0.255");
                IPEndPoint endPoint = new IPEndPoint(serverAddr, 6005);
                byte[] send_buffer = Encoding.ASCII.GetBytes(Rxquebrado);

    Estou recebendo o seguinte erro:

    Use of unassigned local varible

    Se alguem puder ajuadar ...

    Abracos,

    Marcelo

    sexta-feira, 16 de janeiro de 2015 12:38

Respostas

  • Caso tenha conseguido a solução finalize sua Thread marcando a resposta

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Marcado como Resposta Marcos SJ quinta-feira, 17 de dezembro de 2015 17:25
    domingo, 28 de junho de 2015 14:16

Todas as Respostas

  • Faça dessa maneira:

    string[] splitRX = null;
    Socket sock;
    IPAddress serverAddr;
    IPEndPoint endPoint;
    try{
    if(RxString!=null) 
    {
      splitRX = RxString.Split('V');
       foreach(string rx in splitRX) 
        {
           sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
           serverAddr = IPAddress.Parse("192.168.0.255");
           endPoint = new IPEndPoint(serverAddr, 6005);
           byte[] send_buffer = Encoding.ASCII.GetBytes(rx);
         }
    }
    catch(Exception ex)
    {
    MessageBox.Show("Erro "+ex.Message);
    }

    Teste ai
    • Editado Mr. GMSOFT sexta-feira, 16 de janeiro de 2015 12:50
    sexta-feira, 16 de janeiro de 2015 12:48
  • Este erro ocorre quando você tenta acessar uma variável que não tenha seu valor atribuído inicialmente. Ao declarar a variável Rxquebrado, atribua um valor padrão para a mesma.

    string Rxquebrado = String.Empty;

    domingo, 18 de janeiro de 2015 14:10
  • Amigo, compilei mas nao recebo nada na saida. Tem alguma ideia?

    estou usando o hercules para capturar ...

    Desde ja agradeco a forca!

    segunda-feira, 19 de janeiro de 2015 00:52
  • Você testou o que coloquei mais a variável que você criou RXString contem valor?
    segunda-feira, 19 de janeiro de 2015 11:25
  • Amigo,

    de uma olhada no meu codigo.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Text.RegularExpressions;

    namespace SimpleSerial
    {
        public partial class Form1 : Form
        {
            // Adcionando a variavel
            string RxString;

            public Form1()
            {
                InitializeComponent();
            }

            private void buttonStart_Click(object sender, EventArgs e)
            {
                serialPort1.PortName = "COM11";
                serialPort1.BaudRate = 4800;

                serialPort1.Open();
                if (serialPort1.IsOpen)
                {
                    buttonStart.Enabled = false;
                    buttonStop.Enabled = true;
                    textBox1.ReadOnly = false;
                }
            }

            private void buttonStop_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                    buttonStart.Enabled = true;
                    buttonStop.Enabled = false;
                    textBox1.ReadOnly = true;
                }

            }

            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (serialPort1.IsOpen) serialPort1.Close();
            }

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                // If the port is closed, don't try to send a character.
                if (!serialPort1.IsOpen) return;

                // If the port is Open, declare a char[] array with one element.
                char[] buff = new char[1];

                // Load element 0 with the key character.
                buff[0] = e.KeyChar;

                // Send the one character buffer.
                serialPort1.Write(buff, 0, 1);

                // Set the KeyPress event as handled so the character won't
                // display locally. If you want it to display, omit the next line.
                e.Handled = true;
            }

            private void DisplayText(object sender, EventArgs e)
            {
                textBox1.AppendText(RxString);
            }

            private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                RxString = serialPort1.ReadExisting();
                this.Invoke(new EventHandler(DisplayText));
                {

                    string[] splitRX = null;
                    Socket sock;
                    IPAddress serverAddr;
                    IPEndPoint endPoint;
                    try
                    {
                        if (RxString != null)
                        {
                            splitRX = RxString.Split('V');
                            foreach (string rx in splitRX)
                            {
                                sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                                serverAddr = IPAddress.Parse("192.168.0.255");
                                endPoint = new IPEndPoint(serverAddr, 6005);
                                byte[] send_buffer = Encoding.ASCII.GetBytes(rx);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro " + ex.Message);
                    }
                }

            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                 

            }
                
            private void Form1_Load(object sender, EventArgs e)
            {


            }

            private void label1_Click(object sender, EventArgs e)
            {

            }

            private void textBox2_TextChanged(object sender, EventArgs e)
            {
               
            }
        }
    }

    terça-feira, 20 de janeiro de 2015 03:17

  • Oi bom dia,

    Faz um BreakPoint(Seleciona a linha e pressione a tecla F9 do teclado) e verifica se essa variavel possui algum valor nela nessa parte abaixo:

    RxString = serialPort1.ReadExisting();


    terça-feira, 20 de janeiro de 2015 11:16
  • Amigo,

    fiz como disse e nao vi nada. Estranho que consigo ver os dados na textbox vejo a string que entra.

    Tem alguma dica?

    terça-feira, 20 de janeiro de 2015 17:13
  • Comente essa parte do codigo e teste novamente:

     if (RxString != null)
                        {
    }

    terça-feira, 20 de janeiro de 2015 17:33
  • Amigo,

    aparentemente o split esta quebrando os dados.

    Ele esta ficando assim:

    C

    p

    0

    .

    4

    9

    9

    Tem alguma ideia? Pensei em tentar ler os dados e armazena-los em um array?

    Depois posso tentar acessar o array.

    segunda-feira, 16 de fevereiro de 2015 02:30
  • Você esta usando o que como delimitador 'VPP' se for você tem que fazer assim:

    splitRX = RxString.Split(new char[]{'V','P','P');

    Pode se quizer converter em array facilmente dessa forma e ainda pode informar os caracteres que deseja pegar:
    string splitRX =null; 
    string retorno=null;
    
    for(int i=0;i<splitRX.lenght;i+=6)
    {
    //Coloquei um delimitador para você ver se esta pegando correto
      retorno+=splitRxString.ToCharArray(i,6).ToString()+"|";
    }
    /*Vai ter que fazer isso em um laço para pegar todos as string que quer*/

    • Sugerido como Resposta Mr. GMSOFT terça-feira, 17 de fevereiro de 2015 11:57
    segunda-feira, 16 de fevereiro de 2015 10:24
  • Caso tenha finalizado, não esquece de fechar a Thread marcando a resposta

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 10 de março de 2015 12:35
  • Caso tenha conseguido a solução finalize sua Thread marcando a resposta

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Marcado como Resposta Marcos SJ quinta-feira, 17 de dezembro de 2015 17:25
    domingo, 28 de junho de 2015 14:16