Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Ejercicios con conversión de datos
#1

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:

Bash
  1. grep -oi } texto | wc -l



mi función es esta

GAMBAS
  1.   Dim contar3 As Integer
  2.   Dim contar4 As Integer
  3.  
  4.   contar3 = CInt(Val(c))
  5.   contar4 = CInt(Val(d))
  6.  
  7.   Shell "grep -oi { texto | wc -l 2>&1" To c
  8.   Shell "grep -oi } texto | wc -l 2>&1" To d
  9.  
  10.   If c = d Then
  11.     Message.Info("Hay coincidencia")
  12.   Else
  13.     Message.Info("No hay coincidencia")



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
    ¡Gracias!
#2

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

GAMBAS
  1.   Dim contar3 As Integer
  2.   Dim contar4 As Integer
  3.  
  4.   contar3 = CInt(Val(c))  ' El valor en este punto es 0 y no entiendo esa conversión
  5.   contar4 = CInt(Val(d)) ' Lo mismo que lo de arriba
  6.  
  7.   Shell "grep -oi { texto | wc -l 2>&1" To c   '¿qué es texto. Un path, un archivo fijo, una carpeta?
  8.   Shell "grep -oi } texto | wc -l 2>&1" To' Por otra parte no recuerdo bien la sintáxis de grep, pero ¿ese corchete no sobra?
  9.  
  10.   If c = d Then
  11.     Message.Info("Hay coincidencia")
  12.   Else
  13.     Message.Info("No hay coincidencia")



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

No podemos regresar
    ¡Gracias!
#3

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
    ¡Gracias!
#4

Esto funciona para mí: -

GAMBAS
  1.   Dim contar3 As Integer
  2.   Dim contar4 As Integer
  3.   '
  4.   Shell "grep -oi { texto | wc -l 2>&1" To c
  5.   Shell "grep -oi } texto | wc -l 2>&1" To d
  6.  
  7.   contar3 = Val(c)
  8.   contar4 = Val(d)
  9.  
  10.   If contar3 = contar4 Then
  11.     Message.Info("El recuento es igual") 
  12.   Else
  13.     Message.Info("El recuento no es igual")


    ¡Gracias!
#5

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)
    ¡Gracias!
#6

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...

No podemos regresar
    ¡Gracias!
#7

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

GAMBAS
  1.   Dim texto As String
  2.   Dim contar3 As Integer
  3.   Dim contar4 As Integer
  4.  
  5.   texto = Texteditor1.Text
  6.  
  7.   ' Shell "grep -oi { texto | wc -l 2>&1" To c
  8.   ' Shell "grep -oi } texto | wc -l 2>&1" To d
  9.  
  10.   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
  11.   d = "2"
  12.  
  13.   contar3 = Val(c)
  14.   contar4 = Val(d)
  15.  
  16.   If contar3 = contar4 Then
  17.     Return
  18.   Else
  19.     Message.Info("Diferentes")


    ¡Gracias!
#8

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í:

GAMBAS
  1.   Dim contar3 As Integer
  2.   Dim contar4 As Integer
  3.  
  4.   Shell "grep -o { " & ruta & " | wc -l 2>&1" To c
  5.   Shell "grep -o } " & ruta & " | wc -l 2>&1" To d
  6.  
  7.   contar3 = Val(c)
  8.   contar4 = Val(d)
  9.  
  10.   If contar3 = contar4 Then
  11.     Return
  12.   Else
  13.     Message.Info("Hay diferencias en las cantidades")


    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)