none
Controlar tramas de caracteres RRS feed

  • Pregunta

  • Hola:

    Tengo un ejemplo de concatenar caracteres dentro de las variables. Son tres formas de hacerlo.

    using System;
    
    namespace Concatenar_tramas_variables_Consola
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Concatenar variables C# 2017";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 60; // X. Ancho.
                Console.WindowHeight = 20; // Y. Alto.
    
                // Tramas de caracteres en lamisma variable.
                string cmd2 = "500000FF03FF00001C000A04010000D*0095000001";
    
                // Concatenación de variables. Para que cada parte de la trama
                // puedas comentar fácilmente.
                string cmd = "";
                string OutAddress = "0001";
                cmd = "";
                cmd = cmd + "5000";// sub HEAD (NOT).
                cmd = cmd + "00";//   Número de red de trabajo (NOT.)
                cmd = cmd + "FF";// NÚMERO PLC.
                cmd = cmd + "03FF";// DEMANDA OBJETO MÓDULO I/0.
                cmd = cmd + "00";//  DEMANDA OBJETO NÚMERO DE DISPOSITIVO
                cmd = cmd + "001C";//  LONGITUD DEMANDA DE DATOS.
                cmd = cmd + "000A";//  DATOS DE LA CPU.
                cmd = cmd + "0401";//  LEER COMANDO.
                cmd = cmd + "0000";//  Sub commanO.
                cmd = cmd + "D*";//  CÓDIGO DE DISPOSITIVO.
                cmd = cmd + "009500"; // AD BASE.
                cmd = cmd + OutAddress;  //BASE DE DIRECCIONES.
    
                // Comandos en cada variable y concatenarlo.
                string var1 =  "5000";
                string var2 = "00";
                string var3 = "FF";
                string var4 = "03FF";
                string var5 = "00";
                string var6 = "001C";
                string var7 = "000A";
                string var8 = "0401";
                string var9 = "0000";
                string var10 = "D*";
                string var11 = "009500";
                string resultado = string.Empty;
    
                resultado = var1 + var2 + var3 + var4 + var5 + var6 +
                    var7 + var8 + var9 + var10 + var11 + OutAddress;
    
    
                // Muestra información en pantalla.
                Console.WriteLine(cmd2);
                Console.WriteLine();
                Console.WriteLine(cmd);
                Console.WriteLine();
                Console.WriteLine(resultado);
    
                // Pulse cualquier tecla para salir.
                Console.ReadKey();
            }
        }
    }
    

    Una cosa en enviar estos datos al puerto serie.

    string cmd2 = "500000FF03FF00001C000A04010000D*0095000001";

    Y otra es recibirlo.

    Si recibo estos datos por el puerto serie.

    500000FF03FF00001C000A04010000D*0095000001

    ¿Cómo lo diferencio y parta para que se me guarde en cada variable?

    Algo parecido abajo.

                string var1 =  "5000";
                string var2 = "00";
                string var3 = "FF";
                string var4 = "03FF";
                string var5 = "00";
                string var6 = "001C";
                string var7 = "000A";
                string var8 = "0401";
                string var9 = "0000";
                string var10 = "D*";
                string var11 = "009500";

    Saludos.


    http://electronica-pic.blogspot.com

    sábado, 28 de abril de 2018 7:06

Respuestas

  • Si recibo estos datos por el puerto serie.

    500000FF03FF00001C000A04010000D*0095000001

    ¿Cómo lo diferencio y parta para que se me guarde en cada variable?

    Hago la observación de que eso no es un problema de programación sino de diseño. Imagínate que no existiesen los ordenadores, y que esas letras te las entregasen escritas en una hoja de papel. Y ahora, usando un bolígrafo, tienes que separarlas en grupos y escribir los grupos en otra hoja. ¿Cómo lo haces?¿Qué criterio usas para saber cuáles tienes que escribir en cada grupo? Mientras no sepas responder a esta pregunta, no podrás programarlo. Pero una vez que la respondas, seguramente el ejercicio de programación será trivial, y podrá trasladarse tu criterio a código con muy poco esfuerzo.
    • Marcado como respuesta Metaconta sábado, 28 de abril de 2018 12:16
    sábado, 28 de abril de 2018 8:52
    Moderador
  • La pregunta es cómo decides DÓNDE van esos guiones que has puesto.

    Por ejemplo, has hecho algunos grupos con dos caracteres, otros con cuatro, otros con cinco... ¿Cuál es el proceso sistemático por el que has escogido estas longitudes? Si te llega una cadena arbitraria, ¿cómo sabrías por dónde cortarla?

    sábado, 28 de abril de 2018 10:17
    Moderador
  • Ah, pues entonces ese era el dato que faltaba y que tenías que haber dicho desde el principio: Que los números de caracteres que hay que tomar en cada grupo son fijos, es decir, los grupos no dependen del contenido recibido sino que siempre tienen una longitud fija. Siendo así, lo más sencillo es que los trocees usando la función Substring:

     string dato = "500000FF03FF00001C000A04010000D*0095000001";
     string var1 = dato.Substring(0, 4);
     string var2 = dato.Substring(4, 2);
     string var3 = dato.Substring(6, 2);
     string var4 = dato.Substring(8, 4);
     string var5 = dato.Substring(12, 2);
     string var6 = dato.Substring(14, 4);
     string var7 = dato.Substring(18, 4);
     string var8 = dato.Substring(22, 4);
     string var9 = dato.Substring(26, 4);
     string var10 = dato.Substring(30, 2);
     string var11 = dato.Substring(32, 6);

    • Marcado como respuesta Metaconta sábado, 28 de abril de 2018 12:16
    sábado, 28 de abril de 2018 11:29
    Moderador

Todas las respuestas

  • Si recibo estos datos por el puerto serie.

    500000FF03FF00001C000A04010000D*0095000001

    ¿Cómo lo diferencio y parta para que se me guarde en cada variable?

    Hago la observación de que eso no es un problema de programación sino de diseño. Imagínate que no existiesen los ordenadores, y que esas letras te las entregasen escritas en una hoja de papel. Y ahora, usando un bolígrafo, tienes que separarlas en grupos y escribir los grupos en otra hoja. ¿Cómo lo haces?¿Qué criterio usas para saber cuáles tienes que escribir en cada grupo? Mientras no sepas responder a esta pregunta, no podrás programarlo. Pero una vez que la respondas, seguramente el ejercicio de programación será trivial, y podrá trasladarse tu criterio a código con muy poco esfuerzo.
    • Marcado como respuesta Metaconta sábado, 28 de abril de 2018 12:16
    sábado, 28 de abril de 2018 8:52
    Moderador
  • Buen planteamiento. ;)

    Pues...

    Con otro folio...

    Pongo la cantidad de partes del texto señalando con colores o que es.

    Texto original.

    500000FF03FF00001C000A04010000D*0095000001

    En otro folio para dejarlo claro.

    5000-00-FF-03FF-00-001C-000A-0401-0000-D*-00950-00001

    Solo me quedo ahí. Puse guión como puedo poner espacio o otra cosa.



    http://electronica-pic.blogspot.com


    • Editado Metaconta sábado, 28 de abril de 2018 9:27
    sábado, 28 de abril de 2018 9:24
  • La pregunta es cómo decides DÓNDE van esos guiones que has puesto.

    Por ejemplo, has hecho algunos grupos con dos caracteres, otros con cuatro, otros con cinco... ¿Cuál es el proceso sistemático por el que has escogido estas longitudes? Si te llega una cadena arbitraria, ¿cómo sabrías por dónde cortarla?

    sábado, 28 de abril de 2018 10:17
    Moderador
  • Que por cada cierta cantidad de carácteres que me entra o cuenta que haya establecido, pone un -.

    http://electronica-pic.blogspot.com

    sábado, 28 de abril de 2018 10:25
  • Ah, pues entonces ese era el dato que faltaba y que tenías que haber dicho desde el principio: Que los números de caracteres que hay que tomar en cada grupo son fijos, es decir, los grupos no dependen del contenido recibido sino que siempre tienen una longitud fija. Siendo así, lo más sencillo es que los trocees usando la función Substring:

     string dato = "500000FF03FF00001C000A04010000D*0095000001";
     string var1 = dato.Substring(0, 4);
     string var2 = dato.Substring(4, 2);
     string var3 = dato.Substring(6, 2);
     string var4 = dato.Substring(8, 4);
     string var5 = dato.Substring(12, 2);
     string var6 = dato.Substring(14, 4);
     string var7 = dato.Substring(18, 4);
     string var8 = dato.Substring(22, 4);
     string var9 = dato.Substring(26, 4);
     string var10 = dato.Substring(30, 2);
     string var11 = dato.Substring(32, 6);

    • Marcado como respuesta Metaconta sábado, 28 de abril de 2018 12:16
    sábado, 28 de abril de 2018 11:29
    Moderador