elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Tengo un problema con delimitadores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tengo un problema con delimitadores  (Leído 2,838 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Tengo un problema con delimitadores
« en: 30 Noviembre 2023, 07:02 am »

Hola:

En una variable tipo string[] tengo esto usando el lenguaje C# en decimal.
Código
  1. #I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„\r

En otra variable string[] tengo lo mismo pero los datos en decimales.
Código
  1. string entrada2 = "35 73 50 51 53 46 51 79 50 51 53 46 55 76 48 48 54 66 49 48 48 86 50 54 46 48 70 53 48 46 50 72 53 48 46 50 82 48 48 56 48 83 144 132 128 136 132 192 13";

Si te fijas bien en el primer delimitador a partir de la S son bits, la trama comparte entre string y nivel a bits, es decir, usa distinto tipos de datos.

La S muestra esto.
S€„€ˆ„\r

Siempre estas cadenas empieza con # y acaba con \r. No se si hace falta usar StartsWith y EndsWith.

Tabla ASCII.


Fijándose en la tabla ASCII la S rn decimal es 83. A partir de ahí en la cadena entrada2 tiene 144 132 128 136 132 192 y el final que es retorno de carro es el 13 en decimal.

Ya que se lee bien los string de esta linea I225.7O226.2L006B100V25.7F50.2H50.2R0080S y después de la S me da disparates como esto: S€„€ˆ„\r, mejor pasarlo a decimal que es esto otro 144 132 128 136 132 192.

El resultado si ejecuto el código completo es este:


La idea es que muestre bien los datos completo al recibirlos, no en en tipo string y entre medio bit, es decir, datos de distintos tipos.

Parece ser que debo capturar o coger estos datos:
I225.7O226.2L006B100V25.7F50.2H50.2R0080

Separarlos y mostralo así:
225.7
226.2
006
100
25.7
50.2
50.2
0080
€„€ˆ„

Como se puede ver, se muestra esto de la S.
€„€ˆ„

Es ilegible, debería mostrarse así y separados al menos en decimal que se entiende mejor como muestra justo abajo.
144
132
128
136
132
192

¿Existe alguna forma posible que muestre bien la trama completa?

Dejo el código de ejemplo en Visual C#:
Código
  1. namespace Probando_tramas_para_el_SAI_UPS_01___.NET_6._0
  2. {
  3.    public partial class Form1 : Form
  4.    {
  5.        public Form1()
  6.        {
  7.            InitializeComponent();
  8.            this.Text = "Probando tramas de bytes";
  9.        }
  10.  
  11.        private void button_Ver_Click(object sender, EventArgs e)
  12.        {
  13.            // Tramas de bytes con diferentes tipos de datos. A partir de la S, son bits.
  14.            // Siempre la trama empieza con # y acaba con retorno de carro \r. <cr>.
  15.            string entrada = "#I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„\r";
  16.            string entrada2 = "35 73 50 51 53 46 51 79 50 51 53 46 55 76 48 48 54 66 49 48 48 86 50 54 46 48 70 53 48 46 50 72 53 48 46 50 82 48 48 56 48 83 144 132 128 136 132 192 13";
  17.  
  18.            // Delimitador para separar tramas.
  19.            char[] separadores = { '#', 'I', 'O', 'L', 'B', 'V', 'F', 'H', 'R', 'S', '\r' };
  20.  
  21.            // Cortar tramas y lo alacemna en una variable array tipo string.
  22.            string[] salida = entrada.Split(separadores);
  23.  
  24.            foreach (string item in salida)
  25.            {
  26.                richTextBox1.Text += item;
  27.                richTextBox1.Text += Environment.NewLine;
  28.            }
  29.  
  30.            // Nueva línea.
  31.            richTextBox1.Text += Environment.NewLine;
  32.            richTextBox1.Text += Environment.NewLine;
  33.  
  34.            // --------------
  35.  
  36.            string[] salida2 = entrada2.Split(separadores);
  37.  
  38.            foreach (string item2 in salida2)
  39.            {
  40.                richTextBox1.Text += item2;
  41.            }
  42.        }
  43.    }
  44. }

Un cordial saludos.

Saludos.


En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.853


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Tengo un problema con delimitadores
« Respuesta #1 en: 30 Noviembre 2023, 14:27 pm »

Hola, abajo de esta linea:

Código
  1. foreach (string item in salida)

inserta esta línea, es decir este condicional:

Código
  1. If (item == '€') { break; }

Aunque hay otras mejoras formas pero no tengo conocimientos en C#.
Pruébalo y nos comentas.


Saludos


En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Tengo un problema con delimitadores
« Respuesta #2 en: 30 Noviembre 2023, 17:37 pm »

Esta parte de la trama.

Código
  1. S€„€ˆ„\r

No hay que hacer caso.

Si no leerlo justo cuando entra antes del string, aunque en realidad mejor pasarlo a byte[] ya que lee bien, justo lo que es, y luego pasarlo a decimales.

Es lo que quiero hacer. Porque ahora mismo da lectura erronea.
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.176



Ver Perfil
Re: Tengo un problema con delimitadores
« Respuesta #3 en: 30 Noviembre 2023, 20:46 pm »

Puedes crear una lista negra de caracteres para saltártelos como indica Daniel, aunque usaría continue en lugar de break, o si la salida siempre tiene el mismo formato puedes especificar índices del array porque ya sabrías cuales usar y para que:

Código
  1. using System;
  2.  
  3. public class MyApp {
  4.  static void Main() {
  5.    string entrada = "#I225.7O226.2L006B100V25.7F50.2H50.2R0080S€„€ˆ„\r";
  6.    char[] separadores = { '#', 'I', 'O', 'L', 'B', 'V', 'F', 'H', 'R', 'S', '\r' };
  7.    string[] salida = entrada.Split(separadores);
  8.  
  9.    for (int i = 2; i < 10; i++)
  10.      Console.WriteLine("> {0}", salida[i]);
  11.  
  12.    foreach ( uint b in System.Text.Encoding.Default.GetBytes(salida[10]) )
  13.      Console.WriteLine("> {0}", b);
  14.  
  15.  }
  16. }

Con respecto a la última parte, esos caracteres no están contenidos en ASCII así que tendrás que usar otra codificación para su representación decimal, en mi ejemplo puse Default que es igual a ANSI, puedes ver la tabla ASCII y ANSI acá: https://www.gaijin.at/en/infos/ascii-ansi-character-table , UTF-8 ya requiere dos bytes y UTF-16 (Unicode) que es con el que trabaja C# requiere hasta 4 bytes.

En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Tengo un problema con delimitadores
« Respuesta #4 en: 30 Noviembre 2023, 22:42 pm »

Muy bueno la idea.

Estaba intentado guardar en un array los resultado que suelta la variable B.

Luego escojo cualquier valor en decimal y lo muestro en pantalla.

¿Cuál es la mejor manera?

El programa tuyo funciona a la primera.

Edito:
Código
  1.            string entrada = "#I225.7O226.2L006B100V25.7F50.2H50.2R0080S&#8364;&#8222;&#8364;&#710;&#8222;\r";
  2.            char[] separadores = { '#', 'I', 'O', 'L', 'B', 'V', 'F', 'H', 'R', 'S', '\r' };
  3.            string[] salida = entrada.Split(separadores);
  4.            uint[] numeros = new uint[6];
  5.            uint j = 0;
  6.  
  7.            for (int i = 2; i < 10; i++)
  8.            {
  9.                Console.WriteLine($"> {salida[i]}");
  10.            }
  11.  
  12.            foreach (uint b in Encoding.Default.GetBytes(salida[10]))
  13.            {
  14.                Console.WriteLine($"> {b}");
  15.                Console.WriteLine($"Array: {numeros[j] = b}");
  16.                ++j;
  17.            }
« Última modificación: 1 Diciembre 2023, 00:10 am por Meta » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH]Problema con delimitadores xD
Scripting
FranciskoAsdf 4 5,817 Último mensaje 27 Marzo 2011, 09:08 am
por FranciskoAsdf
Tengo problema con un programa que tengo que hacer para la universidad
.NET (C#, VB.NET, ASP)
wilman1010 3 4,264 Último mensaje 3 Diciembre 2011, 20:22 pm
por Unbr0ken
Delimitadores consecutivos
Scripting
Gokuman 2 2,778 Último mensaje 14 Marzo 2015, 04:03 am
por FranciskoAsdf
Regex + split con dos delimitadores en c#
.NET (C#, VB.NET, ASP)
DrKillador 7 4,987 Último mensaje 30 Julio 2017, 15:55 pm
por DrKillador
Ayuda con comando CUT y los delimitadores
GNU/Linux
Pingüino Atormentado 2 2,079 Último mensaje 28 Enero 2019, 15:36 pm
por Pingüino Atormentado
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines