alberto-moyano   09-07-2021, 04:09
#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:

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
Shordi   09-07-2021, 12:42
#2
(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
Última modificación: 09-07-2021, 12:45 por Shordi.

No podemos regresar
alberto-moyano   09-07-2021, 15:04
#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
cogier   09-07-2021, 17:29
#4
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
alberto-moyano   09-07-2021, 17:47
#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)
Última modificación: 09-07-2021, 17:52 por alberto-moyano.
Shordi   09-07-2021, 18:14
#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...
Última modificación: 09-07-2021, 18:21 por Shordi.

No podemos regresar
alberto-moyano   09-07-2021, 23:35
#7
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
alberto-moyano   10-07-2021, 07:07
#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í:

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
  
Usuarios navegando en este tema: 6 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.