Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 24 Marzo 2021, 23:17 pm



Título: Usar un buen delimitador
Publicado por: Meta en 24 Marzo 2021, 23:17 pm
Hola:

Mirando este esquema que son comandos que se envían y recibe del puerto serie.
(https://fotos.subefotos.com/9b88862a018eb448b688e3a1186eb9b1o.png)

Ver imagen (https://fotos.subefotos.com/9b88862a018eb448b688e3a1186eb9b1o.png).

Como dice arriba, si pulso X72 más la tecla Enter <cr> en el terminal del puerto serie como indica abajo. Me muestra estos valores.

(https://fotos.subefotos.com/016a3d0ed20d948ce61fd85b3f3b2cb7o.png)
Ver imagen (https://fotos.subefotos.com/016a3d0ed20d948ce61fd85b3f3b2cb7o.png).

Me mostró esto.

#2000,1400,230,45.0,55.0,8.6

    The apparent power is 2000 VA.
    The active power is 1400 Watts.
    The factory default voltage of output is 230 Volts.
    The rating frecuency range is between 45.0 and 55.0 Hz.
    The rating current is 8.6 Amperes.

Ya puesto en español. En el formulario pongo todo este texto con los labels.

    La potencia aparente es 2000 VA.
    La potencia activa es de 1400 Watts.
    El voltaje de salida predeterminado de fábrica es de 230 voltios.
    El rango de frecuencia nominal está entre 45.0 y 55.0 Hz.
    La corriente nominal es de 8,6 amperios.

Supongamos que recibo el dato indicado arriba y lo vuelvo a mostrar abajo.

#2000,1400,230,45.0,55.0,8.6

Este dato lo guardo en una variable.

La cuestión.

¿Cómo lo paso a cada labels?

Son 5 label indicado arriba, solo cambia el valor en negrita, que son solo números.

¿Alguna idea?

Saludos.


Edito:
Buenas:

Lo he intentado así:
Código
  1. using System;
  2.  
  3. namespace Delimitador_consola_01
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.  
  10.            string phrase = "#2000,1400,230,45.0,55.0,8.6";
  11.            string[] words = phrase.Split('#', ',');
  12.  
  13.            foreach (var word in words)
  14.            {
  15.                Console.WriteLine($"<{word}>");
  16.            }
  17.  
  18.  
  19.  
  20.            // Pulse cualquier tecla para salir.
  21.            Console.ReadKey();
  22.        }
  23.    }
  24. }

¿Cómo hago que me lo muestre así?

La potencia aparente es 2000 VA.
La potencia activa es de 1400 Watts.
El voltaje de salida predeterminado de fábrica es de 230 voltios.
El rango de frecuencia nominal está entre 45.0 y 55.0 Hz.
La corriente nominal es de 8,6 amperios.


Título: Re: Usar un buen delimitador
Publicado por: Serapis en 25 Marzo 2021, 15:22 pm
Es simple, con manejo de strings... concretamente con interpolación de cadenas se consiguen muy buenos resultados y con cierta claridad.


Código
  1. // sd abreviatura para serial Data, pon lo que te parezca mejor...
  2. var sd = (power: "2000", activepower: "1400", voltaje: "230", minrange: "45.0", maxrange: "55.0", amperios: "8.6");
  3.  
  4. Console.Writeline ($"La potencia aparente es {sd.power} watios. {0} La potencia activa es de {sd.activepower}  watios. {0} El voltaje de salida predeterminado de fábrica es de  {sd.voltaje}  voltios.  {0} El rango de frecuencia nominal está entre  {sd.minrange}  y  {sd.maxrange}  Herzios. {0} La corriente nominal es de {sd.amperios}  amperios.",Environment.NewLine );


Lee la documentación (en forma de pasos) (está en español, por si tienes problemas con el inglés):
https://docs.microsoft.com/es-es/dotnet/csharp/tutorials/exploration/interpolated-strings?tutorial-step=1

Nota que además lo he juntado con la forma más clásica:

Código
  1. Console.WriteLine("---Menu del día--- {0} Desayuno: {1}{0} Comida: {2}{0} Cena: {3}{0} ", Environment.NewLine, "Cafe con leche", "Pollo al horno", "Sopa de ajo");
Si la interpolación de cadenas no te funciona con tu versión VS, esta segunda funciona en todas.


Título: Re: Usar un buen delimitador
Publicado por: Meta en 25 Marzo 2021, 17:40 pm
Muchas gracias.

El primero funciona de maravilla, exceptuando qu een medio se ponen 0 y no se el motivo. ;)


Título: Re: Usar un buen delimitador
Publicado por: Serapis en 25 Marzo 2021, 19:18 pm
Ejecuta este ejemplo (más explícito al propósito de entenderlo)... intenta deducir que está sucediendo con esos {numero}... explicarlo es más largo, que escribir esto.

Código
  1. Console.Writeline ("Dias de la semana: {0} {1} {2} {3} {4} {5} {6} (empezando en Lunes)", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo");
  2.  
  3. Console.Writeline ("Dias de la semana: {6} {0} {1} {2} {3} {4} {5} (empezando en domingo)", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo");
  4.  
  5. Console.Writeline ("Dias de la semana: {0} {2} {4} {6} {1} {3} {5} (dias alternos)", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo");
  6.  
  7.  


Título: Re: Usar un buen delimitador
Publicado por: Meta en 25 Marzo 2021, 20:44 pm
Entendido.

Muchísimas gracias.

 ;-) ;-) ;-) ;-)