Cuantas Veces Se Repite Una Cadena En Otra.


Ir a la página Anterior  1, 2, 3  Siguiente

Objetivo: Re: Cuantas Veces Se Repite Una Cadena En Otra.
tincho escribió:  
supongo que C siempre es mas eficiente que gambas.

...más rapido.

Perfil MP  
Objetivo: 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

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

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

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

Perfil MP  
Objetivo: 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

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

Perfil MP  
Objetivo: Re: Cuantas Veces Se Repite Una Cadena En Otra.
y porque no hacen un benchmark?

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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
Perfil MP  
Ir a la página Anterior  1, 2, 3  Siguiente

Página 2 de 3


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 1.0352s (PHP: -89% SQL: 189%)
Consultas SQL: 46 - Debug off - GZIP Activado