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
 
Pues Un Reto Os Pongo Yo:
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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

AnalisisSustantivos-0.0.1.tar.gz
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
AnalisisSustantivos-0.0.1.tar.gz
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
AnalisisSustantivos-0.0.1.tar.gz
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

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pues Un Reto Os Pongo Yo: 
 
shordi escribió: [Ver mensaje]
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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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:

 captura_de_pantalla_de_2014_09_30_11_19_07

El resultado:

Naturalmente yo, como participante, no puedo ser jurado. Propongo a Jesús para que sea el juez del concurso.

StrSpit-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: StrSpit-0.0.1.tar.gz
Tamaño: 7.07 KB
Descargado: 37 veces
StrSpit-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: StrSpit-0.0.1.tar.gz
Tamaño: 7.07 KB
Descargado: 37 veces
StrSpit-0.0.1.tar.gz
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 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pues Un Reto Os Pongo Yo: 
 
shordi escribió: [Ver mensaje]
...del concurso.


Concurrir ? Porque ?  
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 ?.  33animales_plantas
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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pues Un Reto Os Pongo Yo: 
 
shordi escribió: [Ver mensaje]
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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pues Un Reto Os Pongo Yo: 
 
Vaya y yo creía que estabais hablando de...

 best_laetitia_casta_model_celebrity_red_hair2

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 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Encuesta: Encuesta De Reto 1 v3ctor Retos de programación 3 Martes, 02 Septiembre 2014, 22:16 Ver último mensaje
jguardon
No hay nuevos mensajes Reto De La Ultratumba vuott Retos de programación 11 Lunes, 29 Septiembre 2014, 20:57 Ver último mensaje
Shell
No hay nuevos mensajes El Reto De Los Calendarios shordi Retos de programación 3 Sabado, 11 Abril 2015, 09:59 Ver último mensaje
Shell
No hay nuevos mensajes ¿Que Código Pongo Para Usar El Observado... gambafeliz General 4 Martes, 27 Agosto 2019, 13:15 Ver último mensaje
gambafeliz
 

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