Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente
 
Cuantas Veces Se Repite Una Cadena En Otra.
Autor Mensaje
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuantas Veces Se Repite Una Cadena En Otra. 
 
y porque no hacen un benchmark?
 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Busco Función Para Saber El Número De Ve... sc0w General 1 Lunes, 08 Marzo 2010, 07:50 Ver último mensaje
alexprox
No hay nuevos mensajes Cuantas Camaras Web Puedo Tener Instalada ... jsbsan Aplicaciones/Fragmentos de Código 6 Jueves, 14 Octobre 2010, 02:10 Ver último mensaje
codificador
No hay nuevos mensajes ¿ Una Cadena Vacía Es Una Subcadena De C... Shell General 2 Jueves, 07 Agosto 2014, 14:01 Ver último mensaje
Shell
No hay nuevos mensajes Funcion Que Liste Todas Las Veces Que Una ... tincho Aplicaciones/Fragmentos de Código 7 Miercoles, 14 Noviembre 2018, 15:10 Ver último mensaje
tincho
 

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


 
Lista de permisos
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



  

 

cron