Hola!.
Estaba haciendo un censor de palabras.
Tenemos un texto y queremos censurar palabras que se van añadiendo a la lista.
El total de las palabras censuradas se cuentan, ( he visto otro error, si censuro dos veces por que he añadido otra palabra a la lista, no cuenta bien).
Bien. He añadido en el código cosas que hay que solucionar y que tengo que hacer aun.
Problemas:
- Si quito una palabra de la lista, la palabra debe ser restaurada en el texto y que pueda verse. Un array global supongo.
- Problema con palabras que tengan al lado una coma o un punto. En el array se almacenaría el elemento todo junto.
( En realidad no debería perderse la coma o el punto ). Cuando el texto es algo más de una frase no se deben perder los puntos, las comas, etc.
Subo el código por si queréis mejorar o solucionar los problemas.
Saludos
Censor De Palabras, Sin Acabar
Objetivo: Censor De Palabras, Sin Acabar
CensorDePalabras.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | CensorDePalabras.tar.gz | |
Tamaño: | 8.56 KB | |
Descargado: | 36 veces |
CensorDePalabras.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | CensorDePalabras.tar.gz | |
Tamaño: | 8.56 KB | |
Descargado: | 36 veces |
CensorDePalabras.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | CensorDePalabras.tar.gz | |
Tamaño: | 8.56 KB | |
Descargado: | 36 veces |
Objetivo: Re: Censor De Palabras, Sin Acabar
Quién lo hubiera dicho, el amigo Shell abogando por la censura. Lo veo y no lo creo.
Objetivo: Re: Censor De Palabras, Sin Acabar
Hola Shell.
Si entiendo su problema, que desea ocultar una palabra de una frase o un texto ... ¿Es eso lo que quieres hacer?
En este caso creo que hay que tratar con el problema de una manera más general.
¿Por qué tratar a las palabras una tras otra si 'gambas' puede hacer por usted?
De hecho, usted puede encontrar la misma palabra varias veces en un texto y yo creo que hay que empezar por ahí ...
Haga doble clic en la palabra debe ser enviado de vuelta a la caja de texto y luego pulsar el botón, se tienen que buscar la palabra en todo el texto desde el principio del texto (por supuesto).
La palabra, una vez encontrado será reemplazado por dos estrellas (y la censura será más completa y mirando para poner la palabra más fácil.)
Si quiere censurar una segunda palabra para sustituirla con 3 estrellas y así sucesivamente ...
Como si usted quiere poner la palabra censurado # 3 usted sabrá que debe buscar en el texto de todas las secuencias de 4 estrellas ...
Que tengas un buen día.
Si entiendo su problema, que desea ocultar una palabra de una frase o un texto ... ¿Es eso lo que quieres hacer?
En este caso creo que hay que tratar con el problema de una manera más general.
¿Por qué tratar a las palabras una tras otra si 'gambas' puede hacer por usted?
De hecho, usted puede encontrar la misma palabra varias veces en un texto y yo creo que hay que empezar por ahí ...
Haga doble clic en la palabra debe ser enviado de vuelta a la caja de texto y luego pulsar el botón, se tienen que buscar la palabra en todo el texto desde el principio del texto (por supuesto).
La palabra, una vez encontrado será reemplazado por dos estrellas (y la censura será más completa y mirando para poner la palabra más fácil.)
Si quiere censurar una segunda palabra para sustituirla con 3 estrellas y así sucesivamente ...
Como si usted quiere poner la palabra censurado # 3 usted sabrá que debe buscar en el texto de todas las secuencias de 4 estrellas ...
Que tengas un buen día.
Objetivo: Re: Censor De Palabras, Sin Acabar
Una solución podría ser ésta.:
última edición por vuott el Viernes, 03 Octobre 2014, 10:13; editado 2 veces
Shell escribió: [Ver mensaje]
Una solución podría ser ésta.:
Public Function Censurar(untexto As String, palabras As String[]) As String
Dim cuentapalabras As Integer
Dim apalabras As New String[]
Dim palabra As String
Dim i As Integer
apalabras = Split(untexto, " ")
For Each palabra In palabras
For i = 0 To apalabras.Max
Select Case palabra
Case apalabras[i]
cuentapalabras += 1
apalabras[i] = String$(String.Len(apalabras[i]), "*")
Case String.Left(apalabras[i], String.Len(apalabras[i]) - 1)
If IsPunct(String.Right(apalabras[i], 1)) Then
cuentapalabras += 1
apalabras[i] = String$(String.Len(apalabras[i]), "*") & String.Right(apalabras[i], 1)
Endif
End Select
Next
Next
lbcuentapalabras.Text = cuentapalabras
Return apalabras.Join(" ")
End
Dim cuentapalabras As Integer
Dim apalabras As New String[]
Dim palabra As String
Dim i As Integer
apalabras = Split(untexto, " ")
For Each palabra In palabras
For i = 0 To apalabras.Max
Select Case palabra
Case apalabras[i]
cuentapalabras += 1
apalabras[i] = String$(String.Len(apalabras[i]), "*")
Case String.Left(apalabras[i], String.Len(apalabras[i]) - 1)
If IsPunct(String.Right(apalabras[i], 1)) Then
cuentapalabras += 1
apalabras[i] = String$(String.Len(apalabras[i]), "*") & String.Right(apalabras[i], 1)
Endif
End Select
Next
Next
lbcuentapalabras.Text = cuentapalabras
Return apalabras.Join(" ")
End
última edición por vuott el Viernes, 03 Octobre 2014, 10:13; editado 2 veces
Objetivo: Re: Censor De Palabras, Sin Acabar
Dani:
Jajaja, es solo un ejemplo. En realidad , es una ampliación de un ejemplo de Python.
Didier:
Si, efectivamente. El ejemplo es capaz de buscar palabras repetidas.
Solo que hay que mejorarlo un poco. Siempre hay que mejorar.
Merci.
Vuott:
Esta tarde no creo que me ponga a mejorar el ejemplo, ( me voy de fiesta , pero no puedo beber mucho, tengo que volver al trabajo).
Asi que este fin de semana, veo mejor tu mejora.
Grazie mille!.
Citar:
Jajaja, es solo un ejemplo. En realidad , es una ampliación de un ejemplo de Python.
# Censor de palabras
def censor(text,word):
word_lst = text.split()
for i in range(len(word_lst)):
if word_lst[i] == word:
word_lst[i] = len(word_lst[i])* "*"
return " ".join(word_lst)
print (censor("Poderoso caballero es don Dinero", "Dinero"))
def censor(text,word):
word_lst = text.split()
for i in range(len(word_lst)):
if word_lst[i] == word:
word_lst[i] = len(word_lst[i])* "*"
return " ".join(word_lst)
print (censor("Poderoso caballero es don Dinero", "Dinero"))
Didier:
Si, efectivamente. El ejemplo es capaz de buscar palabras repetidas.
Solo que hay que mejorarlo un poco. Siempre hay que mejorar.
Merci.
Vuott:
Esta tarde no creo que me ponga a mejorar el ejemplo, ( me voy de fiesta , pero no puedo beber mucho, tengo que volver al trabajo).
Asi que este fin de semana, veo mejor tu mejora.
Grazie mille!.
Objetivo: Re: Censor De Palabras, Sin Acabar
uhmmmmm..... al final de la fiesta tu estaras asì:
(trad.: Borracho pasea con pitón al cuello.)
http://www.ansa.it/lombardia/notizi...f8846cb5ec.html
Shell escribió: [Ver mensaje]
uhmmmmm..... al final de la fiesta tu estaras asì:
(trad.: Borracho pasea con pitón al cuello.)
http://www.ansa.it/lombardia/notizi...f8846cb5ec.html
Objetivo: Re: Censor De Palabras, Sin Acabar
Je, pues no. Alguna copa, pero nada mas. Hay que ser responsable.
Como dice el compañero didier17, gambas da mejores posibilidades para sustituir las palabras.
Uno de los errores habituales es querer hacer las cosas de la misma forma que
el código original, cuando es posible usar las funciones internas que nos da el propio lenguaje, gambas o Python.
Cuando no la conocemos o no la recordamos usamos otros métodos mas "artesanales"
Por algún motivo en el ejemplo de Python no usó la función Replace. ( Y la tiene disponible )
Si vemos el código en Python es mejor hacerlo de esta forma para la función:
Quedando la función para censurar en gambas de esta forma:
Ahora solo me queda crear una variable global o pasada a la función que recuerde la frase y no se pierda usando solamente la propiedad .text del TextArea.
¿ Qué opinas Vuott ?.
Saludos
vuott escribió: [Ver mensaje]
Je, pues no. Alguna copa, pero nada mas. Hay que ser responsable.
Como dice el compañero didier17, gambas da mejores posibilidades para sustituir las palabras.
Uno de los errores habituales es querer hacer las cosas de la misma forma que
el código original, cuando es posible usar las funciones internas que nos da el propio lenguaje, gambas o Python.
Cuando no la conocemos o no la recordamos usamos otros métodos mas "artesanales"
Por algún motivo en el ejemplo de Python no usó la función Replace. ( Y la tiene disponible )
Si vemos el código en Python es mejor hacerlo de esta forma para la función:
# Censor de palabras
def censor(texto,lista):
for palabra in lista:
texto = texto.replace(palabra,"*" * len(palabra))
return texto
lista_de_palabras =['caballero','Dinero']
print (censor("Poderoso caballero es don Dinero.",lista_de_palabras))
def censor(texto,lista):
for palabra in lista:
texto = texto.replace(palabra,"*" * len(palabra))
return texto
lista_de_palabras =['caballero','Dinero']
print (censor("Poderoso caballero es don Dinero.",lista_de_palabras))
Quedando la función para censurar en gambas de esta forma:
Public Function Censurar(untexto As String, palabras As String[]) As String
Dim cuentapalabras As Integer
Dim palabra As String
For Each palabra In palabras
untexto = Replace(untexto, palabra, String(String.Len(palabra), "*"))
cuentapalabras += 1
Next
lbcuentapalabras.Text = cuentapalabras
Return untexto
End
Dim cuentapalabras As Integer
Dim palabra As String
For Each palabra In palabras
untexto = Replace(untexto, palabra, String(String.Len(palabra), "*"))
cuentapalabras += 1
Next
lbcuentapalabras.Text = cuentapalabras
Return untexto
End
Ahora solo me queda crear una variable global o pasada a la función que recuerde la frase y no se pierda usando solamente la propiedad .text del TextArea.
¿ Qué opinas Vuott ?.
Saludos
Objetivo: Re: Censor De Palabras, Sin Acabar
última edición por Shell el Sabado, 04 Octobre 2014, 00:27; editado 1 vez
Hola.
Aquí os dejo el código con la función mejorada. Merci didier18.
Y gracias a ti Vuott. El código de tu función era un poco más largo.
Queda por solucionar el problema de recuperar la palabra en caso de borrar una palabra de la lista y que se restaure en el texto.
Eso parece fácil, pero ahora ya no son horas.
¿ Debí sustituir el anterior ?. Oh oh.
Saludos
Aquí os dejo el código con la función mejorada. Merci didier18.
Y gracias a ti Vuott. El código de tu función era un poco más largo.
Queda por solucionar el problema de recuperar la palabra en caso de borrar una palabra de la lista y que se restaure en el texto.
Eso parece fácil, pero ahora ya no son horas.
¿ Debí sustituir el anterior ?. Oh oh.
Saludos
última edición por Shell el Sabado, 04 Octobre 2014, 00:27; editado 1 vez
CensorDePalabras.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | CensorDePalabras.tar.gz | |
Tamaño: | 8.47 KB | |
Descargado: | 29 veces |
CensorDePalabras.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | CensorDePalabras.tar.gz | |
Tamaño: | 8.47 KB | |
Descargado: | 29 veces |
CensorDePalabras.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | CensorDePalabras.tar.gz | |
Tamaño: | 8.47 KB | |
Descargado: | 29 veces |
Objetivo: Re: Censor De Palabras, Sin Acabar
Hola amigos.
Creo que para que (todavía) una pequeña mejora de su proyecto, podría usar un 'PopMenu' en el 'TextArea ...
Usted bien podría ser el código más flexible para una inversión mínima.
Por supuesto, es necesario adaptar las rutinas 'PopMenu' de acuerdo a sus necesidades, pero de esta manera que su aplicación tendrá un aspecto más profesional.
Esto es lo que puede dar (por su ejemplo).
Como usted va a trabajar en "Los mensajes de texto" He utilizado el apoyo del ratón ...
Public Sub Texto_MouseDown()
Dim Popmenu, pmnu As Menu
If Mouse.Right Then 'si on a cliqué avec le bouton droit de la souris
Popmenu = New Menu(FMain) 'création du pop up menu
pmnu = New Menu(Popmenu) As "pmnuCensurar" 'création de l'item 0 dans le pop up menu
pmnu.Text = ("Censurar") & Vtxt 'texte de l'item 0
pmnu = New Menu(Popmenu) As "pmnu2" 'création de l'item 1 dans le pop up menu
pmnu.Text = ("pmnu2") 'texte de l'item 1
pmnu = New Menu(Popmenu) As "pmnu3" 'création de l'item 2 dans le pop up menu
pmnu.Text = ("pmnu3") 'texte de l'item 2
pmnu = New Menu(Popmenu) As "pmnu4" 'création de l'item 3 dans le pop up menu
pmnu.Text = ("pmnu4") 'texte de l'item 3
If Popmenu Then Popmenu.Popup() 'si on clique sur pop up menu on affiche les items
Endif 'fin de si on a cliqué avec le bouton droit de la souris
End
Public Sub pmnuCensurar_Click() 'menu pop up Censurar las palabras
End
Public Sub pmnu2_Click()
End
Public Sub pmnu3_Click()
End
Public Sub pmnu4_Click()
End
No dudo que el 'PopMenu' no tiene un secreto para usted, pero me puso este ejemplo 'hackeado' para toda la comunidad (si puede ayudar o dar ideas .. .;-)
Para que este ejemplo funcione, debe hacer un doble "clic" en la palabra que desea ver y luego un clic derecho del ratón se abre el menú PopMenu ...
Salí de comentarios en francés, pero el código es tan simple que trasladase ...
que tengas un buen día
Creo que para que (todavía) una pequeña mejora de su proyecto, podría usar un 'PopMenu' en el 'TextArea ...
Usted bien podría ser el código más flexible para una inversión mínima.
Por supuesto, es necesario adaptar las rutinas 'PopMenu' de acuerdo a sus necesidades, pero de esta manera que su aplicación tendrá un aspecto más profesional.
Esto es lo que puede dar (por su ejemplo).
Como usted va a trabajar en "Los mensajes de texto" He utilizado el apoyo del ratón ...
Public Sub Texto_MouseDown()
Dim Popmenu, pmnu As Menu
If Mouse.Right Then 'si on a cliqué avec le bouton droit de la souris
Popmenu = New Menu(FMain) 'création du pop up menu
pmnu = New Menu(Popmenu) As "pmnuCensurar" 'création de l'item 0 dans le pop up menu
pmnu.Text = ("Censurar") & Vtxt 'texte de l'item 0
pmnu = New Menu(Popmenu) As "pmnu2" 'création de l'item 1 dans le pop up menu
pmnu.Text = ("pmnu2") 'texte de l'item 1
pmnu = New Menu(Popmenu) As "pmnu3" 'création de l'item 2 dans le pop up menu
pmnu.Text = ("pmnu3") 'texte de l'item 2
pmnu = New Menu(Popmenu) As "pmnu4" 'création de l'item 3 dans le pop up menu
pmnu.Text = ("pmnu4") 'texte de l'item 3
If Popmenu Then Popmenu.Popup() 'si on clique sur pop up menu on affiche les items
Endif 'fin de si on a cliqué avec le bouton droit de la souris
End
Public Sub pmnuCensurar_Click() 'menu pop up Censurar las palabras
End
Public Sub pmnu2_Click()
End
Public Sub pmnu3_Click()
End
Public Sub pmnu4_Click()
End
No dudo que el 'PopMenu' no tiene un secreto para usted, pero me puso este ejemplo 'hackeado' para toda la comunidad (si puede ayudar o dar ideas .. .;-)
Para que este ejemplo funcione, debe hacer un doble "clic" en la palabra que desea ver y luego un clic derecho del ratón se abre el menú PopMenu ...
Salí de comentarios en francés, pero el código es tan simple que trasladase ...
que tengas un buen día
Página 1 de 2
No puede crear mensajesNo 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:: 0.1367s (PHP: -3% SQL: 103%)
Consultas SQL: 27 - Debug off - GZIP Activado