Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Cuantas Veces Se Repite Una Cadena En Otra.

Cuantas Veces Se Repite Una Cadena En Otra.
Artículo
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
tincho escribió:  
supongo que C siempre es mas eficiente que gambas.

...más rapido.  



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Sabado, 02 May 2020, 23:49 ]
 


Cuantas Veces Se Repite Una Cadena En Otra.
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
He intentado hacerlo con recursividad.

Aunque no me quedo contento.

'Global variable dependency with the first version of the function
Private counter As Integer

Public Sub Main()
  
  Dim $sentence As String
  Dim $find As String  
  
  $sentence = "Esto es un texto, esto es un texto, esto es un texto."
  $find = "texto"
  
  Print StrCountV2($sentence, $find)
  
End

'' Function that count the times a substring appear in other string
Public Function StrCountV1(sWhere As String, sWhich As String) As Integer
  
  Dim $pos As Integer
  
  $pos = String.InStr(sWhere, sWhich)
  If $pos > 0 Then
    counter += 1
    sWhere = String.Mid(sWhere, $pos + 1)
    Return StrCountV1(sWhere, sWhich)
  Else
    Return counter
  Endif
  
End

'' Function that count the times a substring appear in other string
Public Function StrCountV2(sWhere As String, sWhich As String, Optional $counter As Integer = 0) As Integer
  
  Dim $pos As Integer
  
  $pos = String.InStr(sWhere, sWhich)
  If $pos > 0 Then
    $counter += 1
    sWhere = String.Mid(sWhere, $pos + 1)
    Return StrCountV2(sWhere, sWhich, $counter)
  Else
    Return $counter
  Endif
  
End
 


Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 04 May 2020, 22:12 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
No veo necesidad de usar expresiones regulares para algo sencillo, pero es una posibilidad.
El código se vuelve complicado para algo tan trivial.

Public Sub Main()
    
  Dim $sentence As String  
  
  $sentence = "Esto es un texto, esto es un texto, esto es un texto."  
    
  Print StrCountV1($sentence, "(\\S\\Esto es un texto+)")
    
End

'' Function that count the times a substring appear in other string using gb.pcre component
Public Function StrCountV1(sWhere As String, sRegExpression As String) As Integer
  
  Dim re As RegExp
  Dim matches As New String[]
  
  re = New RegExp(sWhere, sRegExpression)
  Do While re.Offset >= 0 And sWhere <> ""
    matches.Add(re.Text)
    If Len(sWhere) > Len(re.Text) Then
      sWhere = Mid(sWhere, re.Offset + Len(re.Text) + 1)
    Else
      sWhere = ""
    Endif
    If sWhere <> "" Then re.Exec(sWhere)
  Loop
  Return matches.Count  
  
End
 


Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 04 May 2020, 22:45 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
Quisiera haber podido hacer esto al igual que en Python.

import re

texto = "Esto es un texto, esto es un texto, esto es un texto."

y = re.findall('esto es un texto', texto)
print (y)
 


Resultado:

Citar:

['esto es un texto', 'esto es un texto']


Solo es cuestión de aplicar conocer la longitud de la lista para saber cuantas veces se repite.

Como habréis observado ese método no existe en las regex del componente de expresiones regulares de Gambas.
Pero es como una función. Creo que hice una parecida en su día para gambas, muy simple. En esta función
está basada la que he aplicado para el problema.

Prácticamente con más potencia. Es como un find pero a lo bestia, ya que encuentra todas las palabras iguales de una frase.
No es una extracción.


Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 04 May 2020, 22:56 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
Shell escribió:  
Quisiera haber podido hacer esto al igual que en Python.

import re

texto = "Esto es un texto, esto es un texto, esto es un texto."

y = re.findall('esto es un texto', texto)
print (y)
 


Resultado:

Citar:

['esto es un texto', 'esto es un texto']


Solo es cuestión de aplicar conocer la longitud de la lista para saber cuantas veces se repite.
Como habréis observado ese método no existe en las regex del componente de expresiones regulares de Gambas.
Pero es como una función. Creo que hice una parecida en su día para gambas, muy simple. En esta función
está basada la que he aplicado para el problema.
Prácticamente con más potencia. Es como un find pero a lo bestia, ya que encuentra todas las palabras iguales de una frase.
No es una extracción.
Saludos

Si no conozco python pero una vez me dijeron que el manejo de strings en dicho lenguajes es espectacular.
Tal vez en gambas falte un poco de pulido en estos temas pero con las funciones que todos hemos puesto aquí, pot lo menos esto de contar palabras ya existe el parche, jeje
¿Lo que me gustria saber es como ampliar la clase strings de gambas?
Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Martes, 05 May 2020, 12:11 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
Tincho:

Citar:

Si no conozco python pero una vez me dijeron que el manejo de strings en dicho lenguajes es espectacular.
Tal vez en gambas falte un poco de pulido en estos temas pero con las funciones que todos hemos puesto aquí, pot lo menos esto de contar palabras ya existe el parche, jeje


Se puede ver el código re.py de Python. Pero el problema es que este llama a otro y resulta "lioso".

https://github.com/python/cpython/blob/3.8/Lib/re.py

Mortal.

Citar:

¿Lo que me gustaria saber es como ampliar la clase strings de gambas?


 ¿ Qué te parece heredando la clase String ?. Ampliarla y luego crear un componente.
Prueba con añadir tu función a la clase heredada. Pero me parece que para una sola función puede ser poco.

Mejor crear un componente nuevo. Librería (si compensa más). Toca repasar.  
En su día estuvimos creando algo parecido que recopilaba funciones interesantes.
¿ Qué fue ?. ¿ Una librería ?.


Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Martes, 05 May 2020, 20:23 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
Shell escribió:  
...¿ Qué te parece heredando la clase String ?. Ampliarla...

Me parece una buena idea lo voy a intentar.
Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Martes, 05 May 2020, 20:39 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
y porque no hacen un benchmark?



 
tercoIDE - Ver perfil del usuario Enviar mensaje privado  
tercoIDE [ Jueves, 07 May 2020, 16:33 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
vuott escribió:  
tincho escribió:  
supongo que C siempre es mas eficiente que gambas.

...más rapido.  


mucho mas, C es 10 veces mas rapido que gambas + Fast y 1000 veces que gambas solo



 
tercoIDE - Ver perfil del usuario Enviar mensaje privado  
tercoIDE [ Jueves, 07 May 2020, 16:34 ]
Responder citando    Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
tercoIDE escribió:  
y porque no hacen un benchmark?

Buena idea, imagino que te referís a algo así como lo que hiciste con paint y cairo. voy a ver como esta hecho.
Saludos.



 
última edición por tincho el Jueves, 07 May 2020, 16:36; editado 1 vez 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Jueves, 07 May 2020, 16:36 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron