|
Página 2 de 3
|
Pues Un Reto Os Pongo Yo:
Autor |
Mensaje |
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Pues Un Reto Os Pongo Yo:
Shordi:
Dejo aqui mi solución. Admite que los nombres de ciudad están repetidos. Lo que hace es poner las frases unidas con el simbolo de barra vertical "|"
Public Sub Form_Open()
Dim resultado As Collection
Dim texto As String
texto = "Jerez es bonito, Cadiz tiene un puerto.Jerez ciudad del vino y de las bodegas. Sevilla tiene la torre del Oro y la giralda.Cordoba mezquita catedral "
resultado = AnalisisTexto(texto, ["Jerez", "Cadiz", "Sevilla", "Cordoba"])
Print "Jerez:", resultado["Jerez"]
Print "Cadiz:", resultado["Cadiz"]
Print "Sevilla:", resultado["Sevilla"]
Print "Cordoba:", resultado["Cordoba"]
End
Public Function AnalisisTexto(texto As String, lista As String[]) As Collection
Dim original As String = Upper$(texto)
Dim textotrabajo As String = Upper$(texto)
Dim a As Integer
Dim listaFrase As String[]
Dim salida As New Collection
Dim ciudadtmp As String
Dim listaMays As New String[]
Dim primeraCiudad As String
Dim contenido As String
For a = 0 To lista.Max
listaMays.Add(Upper$(lista[a])) 'todo a mayusculas
Next
' 1 º sustituir lista de ciudades en la frase
For a = 0 To lista.Max
textotrabajo = Replace$(textotrabajo, listaMays[a], "##_##")
Next
listaFrase = Split(textotrabajo, "##_##", "", True)
primeraCiudad = LTrim$(RTrim$(Mid$(original, 1, InStr(original, listaFrase[0]))))
If listaMays.Find(primeraCiudad) <> -1 Then
salida.Add(listaFrase[0], lista[listaMays.Find(primeraCiudad)])
Endif
'por cada lista, busca frase...
For a = 0 To listaFrase.Max - 1
ciudadTmp = between(original, listaFrase[a], listaFrase[a + 1])
If listaMays.Find(ciudadTmp) <> -1 Then
If Not salida.Exist(lista[listaMays.Find(ciudadtmp)]) Then
salida.Add(listaFrase[a + 1], lista[listaMays.Find(ciudadtmp)])
Else
'ciudad duplica!!!
contenido = salida[lista[listaMays.Find(ciudadtmp)]]
contenido &= " | " & listaFrase[a + 1]
salida.Remove(lista[listaMays.Find(ciudadtmp)])
salida.Add(contenido, lista[listaMays.Find(ciudadtmp)])
Endif
Endif
Next
Return salida
End
Public Function between(datos As String, cadena1 As String, cadena2 As String) As String
Dim iinf As Integer
Dim isup As Integer
iinf = InStr(datos, cadena1) + Len(cadena1)
isup = InStr(datos, cadena2, iinf)
If iinf = 0 And iinf = 0 Then Return ""
Return Mid$(datos, iinf, isup - iinf)
End
Resultado por consola:
Jerez: ES BONITO, | CIUDAD DEL VINO Y DE LAS BODEGAS.
Cadiz: TIENE UN PUERTO.
Sevilla: TIENE LA TORRE DEL ORO Y LA GIRALDA.
Cordoba: MEZQUITA CATEDRAL
Saludos
Descripción: |
Codigo para extraer informacion de un texto dado ciudades. |
Descargar |
Nombre del archivo: |
AnalisisSustantivos-0.0.1.tar.gz |
Tamaño: |
5.36 KB |
Descargado: |
28 veces |
Descripción: |
Codigo para extraer informacion de un texto dado ciudades. |
Descargar |
Nombre del archivo: |
AnalisisSustantivos-0.0.1.tar.gz |
Tamaño: |
5.36 KB |
Descargado: |
28 veces |
Descripción: |
Codigo para extraer informacion de un texto dado ciudades. |
Descargar |
Nombre del archivo: |
AnalisisSustantivos-0.0.1.tar.gz |
Tamaño: |
5.36 KB |
Descargado: |
28 veces |
|
#11 Lunes, 29 Septiembre 2014, 17:22 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Pues Un Reto Os Pongo Yo:
Dim scriptum As String = "Albacete 5000 y una vaca Soria ni se sabe Madrid un mogollón"
Public Sub Main()
Dim scriptum As String = "Albacete 5000 y una vaca Soria ni se sabe Madrid un mogollón"
Dim scripta As String[] = ["Albacete", "Ciudad Real", "Madrid"]
Dim b As Byte
Dim coll As Collection
coll = StringSplit(scriptum, scripta)
For b = 0 to scripta.Max
Print coll[scripta[b]]
Next
End
Private Function StringSplit(s As String, ss As String[]) As Collection
Dim b As Byte
Dim bb As New Byte[]
Dim t As String
Dim conlectio As New Collection
For b = 1 To Len(s)
If IsUCase(Mid(s, b, 1)) Then bb.Add(b)
Next
t = Left(s, bb[1] - 1)
conlectio.Add(Trim(Replace(t, ss[0], Null)), ss[0])
t = Mid(s, bb[1], bb[2] - bb[1] - 1)
b = InStr(t, "\x20")
conlectio.Add(Right(t, Len(t) - 6), ss[1])
t = Right(s, Len(s) - bb[2] + 1)
conlectio.Add(Trim(Replace(t, ss[2], Null)), ss[2])
Return conlectio
End
Saludos
última edición por vuott el Lunes, 29 Septiembre 2014, 19:35; editado 1 vez
|
#12 Lunes, 29 Septiembre 2014, 19:11 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Pues Un Reto Os Pongo Yo:
Hola!.
Yo no hice la función, pero hice dos pasos emulando un bucle.
Public Sub Main()
Dim aprovincias As String[] = ["A Coruña", "Alava", "Albacete"]
Dim sfichero As String = "A Coruña es bonita, Alava no tiene nada que envidiar. Albacete sin cuestas"
Dim clave As String
Dim valor As String
Dim cviaje As New Collection
Dim comenzar_desde_aqui As Integer
Dim buscar_hasta_aqui As Integer
' - Primer paso de un bucle
comenzar_desde_aqui = String.InStr(sfichero, aprovincias[0]) + String.Len(aprovincias[0])
buscar_hasta_aqui = String.InStr(sfichero, aprovincias[1]) - 1
clave = aprovincias[0]
valor = String.Mid(sfichero, comenzar_desde_aqui, buscar_hasta_aqui - comenzar_desde_aqui)
Print clave, valor
cviaje.Add(valor, clave)
' - Segundo paso de un bucle
comenzar_desde_aqui = String.InStr(sfichero, aprovincias[1]) + String.Len(aprovincias[1])
buscar_hasta_aqui = String.InStr(sfichero, aprovincias[2]) - 1
clave = aprovincias[1]
valor = String.Mid(sfichero, comenzar_desde_aqui, buscar_hasta_aqui - comenzar_desde_aqui)
Print clave, valor
cviaje.Add(valor, clave)
End
Claro, aparecen comas, puntos.
¿ Es necesario complicarse tanto para hacer esto ?.
Por cierto, una pregunta.
En Python se usan # para comentarios, pero de casualidad en vez de usar ' para crear un comentario, puse # en gambas, me dio error de sintaxis.
¿ Tiene algún uso # en gambas para una función especial ?. Ahora no recuerdo.
Como el color era distinto, me quede con la duda.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Lunes, 29 Septiembre 2014, 20:28; editado 2 veces
|
#13 Lunes, 29 Septiembre 2014, 20:26 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Pues Un Reto Os Pongo Yo:
Codigo un po' mas universal:
Public Sub Main()
Dim scriptum As String = "Madrid es la capital de España.Roma es la capital de Italia Atenas es la capital de Grecia. Europa es su casa. "
Dim scripta As String[] = ["Madrid", "Roma", "Atenas", "Europa"]
Dim b As Byte
Dim coll As Collection
coll = StringSplit(scriptum, scripta)
For b = 0 To coll.Count - 1
Print coll[scripta[b]]
Next
End
Private Function StringSplit(s As String, ss As String[]) As Collection
Dim b, c As Byte
Dim bb As New Byte[]
Dim t, r As String
Dim tt As New String[]
Dim conlectio As New Collection
For b = 1 To Len(s)
If IsUCase(Mid(s, b, 1)) Then
c = b
r = Null
Do
r &= Mid(s, c, 1)
Inc c
Loop Until (IsLetter(Mid(s, c, 1)) = False) And (IsDigit(Mid(s, c, 1)) = False)
If ss.Exist(r) Then
tt.Add(r)
bb.Add(b)
Endif
Endif
Next
For b = 0 To bb.Max - 1
t = Mid(s, bb[b], bb[b + 1] - bb[b])
conlectio.Add(Trim(Replace(t, tt[b], Null)), tt[b])
Next
conlectio.Add(Trim(Replace(Right(s, Len(s) - bb[bb.Max] + 1), tt[tt.Max], Null)), tt[tt.Max])
Return conlectio
End
|
#14 Lunes, 29 Septiembre 2014, 23:21 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Pues Un Reto Os Pongo Yo:
Vale, he aquí las soluciones aportadas reunidas en un proyecto para su comparación.
Las funciones, cumpliendo su misión de estandarizar tareas, se puden someter a prueba con cualquier conjunto de frase-valores. Como prueba B le he añadido una segunda opción para "destripar" una sentencia SQL.
Queda bonito:
El resultado:
Naturalmente yo, como participante, no puedo ser jurado. Propongo a Jesús para que sea el juez del concurso.
Descripción: |
|
Descargar |
Nombre del archivo: |
StrSpit-0.0.1.tar.gz |
Tamaño: |
7.07 KB |
Descargado: |
37 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
StrSpit-0.0.1.tar.gz |
Tamaño: |
7.07 KB |
Descargado: |
37 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
StrSpit-0.0.1.tar.gz |
Tamaño: |
7.07 KB |
Descargado: |
37 veces |
última edición por shordi el Martes, 30 Septiembre 2014, 10:24; editado 1 vez
|
#15 Martes, 30 Septiembre 2014, 10:24 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Pues Un Reto Os Pongo Yo:
...del concurso.
Concurrir ? Porque ?
|
#16 Martes, 30 Septiembre 2014, 10:44 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Pues Un Reto Os Pongo Yo:
Shordi:
No se supone que ibas a ser jurado e ibas a valorar los códigos
Al menos dar una buena opinión...o mala.
Vuott:
No te entendí. ¿ Qué entendiste por concurrir ?.
Creo que Vuott esperaba lo mismo que yo. Julio a lo mejor no. Es altamente altruista .
¿ Qué pasa con el gorrino ?.
Jorge, no me dejan tenerlo en casa.
Ale, mas faena para el jefe, jeje.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#17 Martes, 30 Septiembre 2014, 11:16 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Pues Un Reto Os Pongo Yo:
Citar: concurrir ? por qué?
Labor lætitia nostra, Vuott.
Citar: Al menos dar una buena opinión...o mala.
Quid custordat ipsos custodes, Shell?
Citar: ¿ Qué pasa con el gorrino ?
¿Gorrino?¿qué gorrino?
Citar:
Ale, mas faena para el jefe, jeje.
Para eso es el jefe, ya sabes: Vulgus veritatis pessimus interpres
|
#18 Martes, 30 Septiembre 2014, 12:24 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Pues Un Reto Os Pongo Yo:
Labor lætitia nostra, Vuott.
ehmmm.... "lætitia" ?
...antefero magis diu Musarum suaves voces sub tegmine cerri audire quam breviter sudare !
última edición por vuott el Martes, 30 Septiembre 2014, 15:15; editado 1 vez
|
#19 Martes, 30 Septiembre 2014, 15:15 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Pues Un Reto Os Pongo Yo:
Vaya y yo creía que estabais hablando de...
Y estabais hablando de "la alegría" del trabajo!. Al ver laetitia, confundí con otra Laetitia.
Que lio de nombres.
Deliriant isti Romani.
Citar:
Edito:
....Eso sí si alguien se atreve sin esos límites, le envío por correo un gorrino vivo con un saco de pienso en la caja para que no se muera por el camino.
Por cierto....
Para los que les gusta el Latín
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Martes, 30 Septiembre 2014, 18:46; editado 2 veces
|
#20 Martes, 30 Septiembre 2014, 18:41 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 2 de 3
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|