Cuantas Veces Se Repite Una Cadena En Otra.


Goto page Previous  1, 2, 3  Next

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

...más rapido.

Profile PM  
Subject: 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

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

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

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

Profile PM  
Subject: 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

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

Profile PM  
Subject: Re: Cuantas Veces Se Repite Una Cadena En Otra.
y porque no hacen un benchmark?

Profile PM  
Subject: 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

Profile PM  
Subject: 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.

Last edited by tincho on Thursday, 07 May 2020, 16:36; edited 1 time in total
Profile PM  
Goto page Previous  1, 2, 3  Next

Page 2 of 3


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1326s (PHP: -1% SQL: 101%)
SQL queries: 24 - Debug Off - GZIP Enabled