Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 3
Ir a la página 1, 2, 3  Siguiente
 
Pues Un Reto Os Pongo Yo:
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Pues Un Reto Os Pongo Yo: 
 
Igual que Split devuelve un array a partir de una cadena de caracteres con los separadores que le digamos, os reto a una función que devuelva una colección pasándole una serie de subcadenas.

Ejemplo (suponiendo que la llamemos stringSplit:

StringSplit( "Albacete 5000 y una vaca. Soria ni se sabe. Madrid un mogollón",["Albacete","Ciudad Real","Madrid"])

El resultado debe ser una colección que tenga los elementos "Albacete" y el valor "5000 y una vaca", "Ciudad Real" y el valor "ni se sabe", etc.

A ver esa creatividad.

Saludos.

Edito:
Para que no os sea muy complicado vamos a suponer que no puede haber valores repetidos y que los valores van en orden. 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.
 



 
última edición por shordi el Domingo, 28 Septiembre 2014, 15:25; 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: 
 
Luego lo veo con más tranquilidad. Hoy estarán la mayoría de domingo.  
Todos con el traje de gala!.

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: 
 
No se si yo he entiedido bien lo que escribiste. De todos modos este es el mi aporte, usando solamente funciones de cadenas:  

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", "Soria", "Madrid"]
  Dim coll As Collection
  
    coll = StringSplit(scriptum, scripta)
    Print coll[scripta[0]]
    Print coll[scripta[1]]
    Print coll[scripta[2]]

End


Private Function StringSplit(s As String, ss As String[]) As Collection

  Dim t, r As String
  Dim sh As Short
  Dim conlectio As New Collection
  
    sh = String.InStr(s, ".")
    t = Left(s, sh - 1)
    r = Right(s, String.Len(s) - sh)
    t = Trim(Replace(t, ss[0], Null))
    conlectio.Add(t, ss[0])
    
    sh = String.InStr(r, ".")
    t = Left(r, sh - 1)
    r = Right(r, String.Len(r) - sh)
    t = Trim(Replace(t, ss[1], Null))
    conlectio.Add(t, ss[1])
    
    t = Trim(Replace(r, ss[2], Null))
    conlectio.Add(t, ss[2])

  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: 
 
¡No vale!, te has guiado por el punto y el punto puede ir o puede no ir, no es siginificativo. Tienes que guiarte por el segundo parámetro.
 



 
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]
Tienes que guiarte por el segundo parámetro.

Ah, ok.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pues Un Reto Os Pongo Yo: 
 
smileysuicide

Siempre solo usando funciones de cadenas:
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 coll As Collection
  
    coll = StringSplit(scriptum, scripta)
    Print coll[scripta[0]]
    Print coll[scripta[1]]
    Print coll[scripta[2]]

End


Private Function StringSplit(s As String, ss As String[]) As Collection

  Dim t As String
  Dim tt As New String[2]
  Dim i As Integer
  Dim j As Byte
  Dim conlectio As New Collection


    i = String.InStr(s, ss[2]) - 1
    t = Right(s, Len(s) - i)
    tt[1] = Trim(Replace(t, ss[2], Null))

    s = Left(s, 44 - 2)
    For i = 1 To Len(s)
      If IsPunct(Mid(s, i, 1)) Then
        t = Trim(Right(s, Len(s) - i))
        For j = 1 To Len(t)
          If IsSpace(Mid(t, j, 1)) Then
            tt[0] = Right(t, Len(t) - j)
            Exit
          Endif
        Next
        Exit
      Endif
    Next

    s = Left(s, i - 1)
    t = Trim(Replace(s, ss[0], Null))
    conlectio.Add(t, ss[0])
    conlectio.Add(tt[0], ss[1])
    conlectio.Add(tt[1], ss[2])
    
  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: 
 
Uff, muy tarde para mi ahora... 11dormir
No acabé de entender bien el problema. ¿ Cual se supone que es la clave y cuales los valores ?.  33animales_plantas

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: 
 
Vuott, estamos en las mismas: te basas en el punto con la función Ispunct()

Los signos de puntuación NO son significativos, ni los espacios. Sólo los elementos del segundo parámetro, el array.
Para hacerlo más claro, prueba con ésta cadena, o con la que quieras:

  Dim scriptum As String = "Albacete 5000 y una vaca Soria ni se sabe Madrid un mogollón"
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pues Un Reto Os Pongo Yo: 
 
Shell:
En este ejemplo la colección debe devolver como clave los nombres de las ciudades y como valores la cadena que haya después del nombre hasta el siguiente nombre.
No sé si me explico.
Tienes una lista de todas las capitales de provincias españolas :
dim arprovincias as string[]=["A Coruña","Alava","Albacete","Alicante","Almería","Asturias","Avila","Badajoz","Barcelona","Burgos","Cáceres","Cádiz","Cantabria","Castellón","Ceuta","Ciudad Real","Córdoba","Cuenca","Girona","Granada","Guadalajara","Guipúzcoa","Huelva","Huesca","Illes Balears","Jaén","La Rioja","Las Palmas","León","Lleida","Lugo","Madrid","Málaga","Melilla","Murcia","Navarra","Ourense","Palencia","Pontevedra","Salamanca","Santa Cruz de Tenerife","Segovia","Sevilla","Soria","Tarragona","Teruel","Toledo","Valencia","Valladolid","Vizcaya","Zamora","Zaragoza"]


Imagina que has recibido un fichero de texto con los resultados de las impresiones de un viaje o de lo que sea, metidos caóticamente por ciudades. Ni siquiera están todas las ciudades. Ni siquiera están divididos por enter o puntos o nada identificable.
algo así:
dim sfichero as string = "A Coruña es bonita, Alava no tiene nada que envidiar.
Albacete sin cuestas
Asturias se come muy bien pero Cuenca ¡es preciosa oiga!
Lugo ...
Madrid lleno de gente. Santa Cruz de Tenerife hay que ir en barco"


La colección debe contener como clave el nombre de la ciudad y como valor el comentario del viaje. Puedes sacar las ciudades no mencionadas con valores vacíos o no sacarlas, a tu gusto.
Por la caótica entrada de datos, la función debe ser insensible a mayúsculas y minúsculas, claro.
Para no hacerlo más difícil, vamos a suponer que los nombres de ciudad no están repetidos....

....y, por supuesto, sólo puedes usar funciones de gambas, nada de editores en stream o cosas así.
 



 
última edición por shordi el Lunes, 29 Septiembre 2014, 09:53; 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.

Creo que lo entendí, hago un ejemplo simple de las provincias y lo subo para comentar. A ver que opinas.
Pero muy simple..

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
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 1 de 3
Ir a la página 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