Pues Un Reto Os Pongo Yo:


Ir a la página 1, 2, 3  Siguiente

Objetivo: 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
Perfil MP  
Objetivo: 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

Objetivo: 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

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: Re: Pues Un Reto Os Pongo Yo:
shordi escribió: [Ver mensaje]
Tienes que guiarte por el segundo parámetro.

Ah, ok.

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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

Objetivo: 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"

Perfil MP  
Objetivo: 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
Perfil MP  
Objetivo: 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

Ir a la página 1, 2, 3  Siguiente

Página 1 de 3


  
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

   

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.1344s (PHP: 2% SQL: 98%)
Consultas SQL: 25 - Debug off - GZIP Activado