** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - dividir string en varias
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradodividir string en varias

 Responder Responder
Autor
Mensaje
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 537
Enlace directo a este mensaje Tema: dividir string en varias
    Enviado: 16/Diciembre/2019 a las 08:31
Buenos dias ,

Access me lee en una pagina web los resultados de partidos de futbol en este formato:

dim str as string
str="Valencia - Real Madrid0:2"
str="Barcelona - Sevilla1:0"

Hasta aqui todo bien, los ultimos 3 caracteres  los paso a un campo de mi base de datos, los carateres a la izquierda del caracter "-" los paso a otro campo de mi BD , y los caracteres a la derecha del caracter "-", los paso a otro campo de mi BD

hasta que me encuentro con este partido:

"AS Saint-Étienne- Paris Saint-Germain0:4" 

en este caso tengo 3 caracteres "-", pero podria haber solo 2  o a lo mejor 4.
Como puedo dividir la string para ponerlo en los respectivos campos?

hasta ahora estoy haciendo algo que no me parece muy eficiente que es :
str = Replace(str, "Saint-Étienne", "Saint Étienne")
str = Replace(str, "Paris Saint-Germain", "Paris Saint Germain")

pero claro, pueden existir muchas incidencias de strings con mas de un delimitador, y dificiles de predecir, ya que existen centenares de equipos de futbol.
Alguna funcion podria hacer esto ?, o sea , retirar todos los caracteres "-" con excepcion del que separa el nombre de los 2 equipos , teniendo en cuenta que access no sabe cual es el caracter que divide los 2 partidos

Bienvenidas Vuestras sugerencias


Editado por cpampasPT - 16/Diciembre/2019 a las 08:34
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 11:34
Podrías utilizar split.
Luego valida que el objeto resultante es un array.
Con ubound comprueba cuantos elementos tiene ese array y si tiene más de dos, toma el penúltimo y el ultimo.

Desde otro ángulo, ordenando el array a la inversa, tomas el primero y el segundo, indistintamente de su longitud, pero en este momento ignoro si se puede ordenar un array ( de manera sencilla) con VBA.
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 537
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 13:34
hola guarracuco
Lo voy a probar y te lo comento
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 537
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 16:01
Hola Guarracuco,

probe como me dijiste, pero parece dificil resolver el tema cuando hay mas de un caracter "-", por que access no sabe cual es que debe delimitar la string.hice esto

Dim str As String, count As Integer, str2 As String
Dim sParts() As String
str = "AS SaintÉtienne- Paris Saint-Germain"
count = Len(str) - Len(Replace(str, "-", ""))

   If count > 1 Then
         sParts = Split(str, "-")
               For a = 0 To count
                  Select Case count
                     Case 3
                        If a <> 2 Then
                           str2 = str2 & " " & sParts(a)
                        Else
                           str2 = str2 & "-" & sParts(a)
                        End If
                       
                      Case 2
                         ' si la variable str, solo tiene  2 caracteres "-" no veo como decidir qual de ellos
                         ' es el delimitador
                       case 4
                          ' Y TAMPOCO SI TIENE 4
                  End Select
               Next a
               Debug.Print str2 ' funciona si existen 3 caracteres "-"
   End If


Arriba
fcoval Ver desplegable
Asiduo
Asiduo


Unido: 19/Enero/2013
Estado: Sin conexión
Puntos: 225
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 17:22
Cita Hasta aqui todo bien, los ultimos 3 caracteres los paso a un campo de mi base de datos


Y una curiosidad porque dices que coges tres dígitos para el resultado... ¿ y si un equipo marca 10 goles ? esta claro que será un caso difícil, pero no imposible.

Yo jugaría con el carácter DOS PUNTOS, a su derecha seguro que esta bien, y a su izquierda, el primer carácter seguro que es número y si el segundo es un 1 lo consideraría.


Respecto a poder separar los nombres de los equipos según el número de guiones yo no lo veo nada claro, pues un mismo equipo puede jugar tanto de local como de visitante y ya no sabes que posición ocupa el guion que te interesa localizar... no te quedara otra que mirar si puedes sacar de otro campo de la web el nombre de los equipos (o equipo, porque teniendo un nombre puedes sacar el otro nombre)

Editado por fcoval - 16/Diciembre/2019 a las 17:31
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 17:37
Tienes un detalle: no puedes utilizar la longuitud de caracteres como lo que estás haciendo. Tienes que utilizar la función ubound para saber cuántos elementos tiene el array.
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 537
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 20:25
fcoval,

pense igual que tu, o sea que equipo le va a meter 10 goles al otro, jaja. pero tienes razon voy a hacerlo como dices

guarracuco,
la expresion que estava usando creo que me cuenta el numero de elementos separado por un dado caracter.

count = Len(str) - Len(Replace(str, "-", ""))+1

en todo caso estoy pensando que lo mejor sera crear una tabla con dos campos (equipoBueno, equipoMalo), donde guardaria  todos los equipos con caracteres raros, y despues haria un .findFirst en esa tabla para modificar el nombre de los equipos en conformidad, asi de momento no veo otra forma

que os parece ?
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 21:34
No estas contemplando los espacios. Es mas confiable el contar los elementos en el array.
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 537
Enlace directo a este mensaje Enviado: 16/Diciembre/2019 a las 23:43
Guarracuco,
si tienes razon  es mas seguro con el array.
Gracias

Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 537
Enlace directo a este mensaje Enviado: 17/Diciembre/2019 a las 09:01
Intentare seguir por el camino de crear una tabla que recoja todas las string que incluyan este caracter, y modificarlar las string buscando en esa tabla
gracias por Vuestra colaboracion

P.S.  por mi podeis cerrar el hilo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable