Comunidad Gambas-es
Ejercicios con conversión de datos - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html)
+--- Tema: Ejercicios con conversión de datos (/thread-505.html)



Ejercicios con conversión de datos - alberto-moyano - 09-07-2021

Hola gente

Estoy haciendo una práctica de conversión de datos, primero probé la función de grep desde consola y funciona, es esta:

Código:
grep -oi } texto | wc -l

mi función es esta

Código:
  Dim c As String
  Dim d As String
  Dim contar3 As Integer
  Dim contar4 As Integer

  contar3 = CInt(Val(c))
  contar4 = CInt(Val(d))

  Shell "grep -oi { texto | wc -l 2>&1" To c
  Shell "grep -oi } texto | wc -l 2>&1" To d

  If c = d Then
    Message.Info("Hay coincidencia")
  Else
    Message.Info("No hay coincidencia")
  Endif

El error que obtengo es que el valor de c y d son nulos.

Mi duda es si estoy obteniendo el error en la salida de shell o en la conversión de string a integer


RE: Ejercicios con conversión de datos - Shordi - 09-07-2021

(09-07-2021, 04:09)alberto-moyano escribió: mi función es esta

Código:
  Dim c As String
  Dim d As String
  Dim contar3 As Integer
  Dim contar4 As Integer

  contar3 = CInt(Val(c))  ' El valor en este punto es 0 y no entiendo esa conversión
  contar4 = CInt(Val(d)) ' Lo mismo que lo de arriba

  Shell "grep -oi { texto | wc -l 2>&1" To c   '¿qué es texto. Un path, un archivo fijo, una carpeta?
  Shell "grep -oi } texto | wc -l 2>&1" To d  ' Por otra parte no recuerdo bien la sintáxis de grep, pero ¿ese corchete no sobra?

  If c = d Then
    Message.Info("Hay coincidencia")
  Else
    Message.Info("No hay coincidencia")
  Endif

El error que obtengo es que el valor de c y d son nulos.

Mi duda es si estoy obteniendo el error en la salida de shell o en la conversión de string a integer



RE: Ejercicios con conversión de datos - alberto-moyano - 09-07-2021

Hola Shordi, cuando escribí la función en el foro falto una variable más que está en mi código, es: texto es un string (el contenido de TextEditor1.text).

c y d son los resultados de la búsqueda, es un valor numérico pero es un string y lo quiero convertir a integer para analizarlo en el condicional.

Las 2 llaves son los caracteres que estoy contando dentro de texto

Saludos


RE: Ejercicios con conversión de datos - cogier - 09-07-2021

Esto funciona para mí: -

Código:
Dim c As String
  Dim d As String
  Dim contar3 As Integer
  Dim contar4 As Integer
  '
  Shell "grep -oi { texto | wc -l 2>&1" To c
  Shell "grep -oi } texto | wc -l 2>&1" To d

  contar3 = Val(c)
  contar4 = Val(d)

  If contar3 = contar4 Then
    Message.Info("El recuento es igual") 
  Else
    Message.Info("El recuento no es igual")
  Endif



RE: Ejercicios con conversión de datos - alberto-moyano - 09-07-2021

Hola Cogier, funciona pero da error el cálculo, siempre dice que hay coincidencia.

Supongamos que tenemos 2 llaves de apertura y una de cierre, c obtiene un 2 como string pero lo convierte a 1 integer y d obtiene un 1 como string y lo convierte a 1 integer, por eso sigue dando coincidencia, el tema que no entiendo es como convertir el resultado que viene como string a ese valor como integer.

Hice la prueba poniendo 11 llaves de apertura (para obtener 2 dígitos) y el resultado es igual, lo convierte a 1 integer.

Ya creo ver por donde van los tiros.

Siempre da coincidencia porque lo convierte a 0, hice la prueba poniendo una sola llave, y también da coincidencia, esto me lleva a pensar que el error está en lo que estoy obteniendo (o como lo estoy obteniendo)


RE: Ejercicios con conversión de datos - Shordi - 09-07-2021

A mí si me funciona la versión de cogier.
Al principio creí que el corchete era un caracter especial de markdown o un error de tu código. Ni se me ocurrió que buscabas corchetes... Qué viejuno estoy, oiga...


RE: Ejercicios con conversión de datos - alberto-moyano - 09-07-2021

Bueno, ya acorralé el problema, ahora a buscar la solución

Código:
  Dim texto As String
  Dim c As String
  Dim d As String
  Dim contar3 As Integer
  Dim contar4 As Integer

  texto = Texteditor1.Text

  ' Shell "grep -oi { texto | wc -l 2>&1" To c
  ' Shell "grep -oi } texto | wc -l 2>&1" To d

  c = "4" 'este valor lo cambio y compruebo que las variables, la conversión y el condicional funcionan, ergo el problema lo tengo con la salida del shell
  d = "2"

  contar3 = Val(c)
  contar4 = Val(d)

  If contar3 = contar4 Then
    Return
  Else
    Message.Info("Diferentes")
  Endif



RE: Ejercicios con conversión de datos - alberto-moyano - 10-07-2021

Bueno, solucionado, el problema era que no hacía el grep sobre el archivo, la solución fue pasarle el path (ruta es la variable que lleva el path del archivo en curso), quedo así:

Código:
  Dim c As String
  Dim d As String
  Dim contar3 As Integer
  Dim contar4 As Integer

  Shell "grep -o { " & ruta & " | wc -l 2>&1" To c
  Shell "grep -o } " & ruta & " | wc -l 2>&1" To d

  contar3 = Val(c)
  contar4 = Val(d)

  If contar3 = contar4 Then
    Return
  Else
    Message.Info("Hay diferencias en las cantidades")
  Endif