Access. Cadenas de texto. Extraer datos para varios campos.

Estoy bastante familiarizado con las funciones Left, Mid o Right a la hora de extraer datos de una cadena de texto sencilla, pero no termino de encontrar la forma de mandar los datos de la siguiente cadena a diferentes campos de una consulta:

David NILSSON (SWE) - 16 Apr 1987

Los campos a rellenar serían Nombre, Apellido, País y Fecha de Nacimiento.

¿Habría alguna forma de automatizarlo?

1 Respuesta

Respuesta
1

Hay una función diferente de Left, Mid y Right que creo que te va a solucionar el problema. Esta función se llama InStr (En Español, EnCadena) y lo que hace, es buscar un carácter en una cadena.

Siendo "Datos" la cadena que contiene los datos, puedes probar esto:

Datos="David NILSSON (SWE) - 16 Apr 1987"

Posicion = InStr("-", Datos)   ' -Esto busca la posicion del caracter guion en la cadena "Datos"

Fch_Nacimiento= Right(Datos, Posicion+1)

Otros_Datos = Left(datos, Posición-1,)  ' - Esto contendrá el nombre y el pais

Posicion2 = InStr("(", Otros_Datos)  '-Ahora buscamos el parentesis del pais'

Pais= Right(Otros_Datos, Posicion2)   '-Devolverá el pais, incluido el paréntesis

Posición3= InStr(" ", Otros_Datos)  '-Buscamos el primer espacio entre nombre y apellidos

Nombre=Left(Otros_Datos, Posicion3)

Apellido=Right(Otros_Datos, Posicion3-1)

Esto debería cumplir con todas las funcionalidades que estás buscando...

Muchísimas gracias por tu ayuda Gomzky. Lógica y didáctica.

He seguido tus pasos para detectar la posición del guión pero me da 0. No sé si puede ser debido que el guión que uso para definir la función no es el mismo que aparece en la cadena de texto ya que proviene de un teclado no español.

Posicion: InStr('-';[Nombre_apellido])

Saludos.

Carlos.

Discúlpame, pero creo que me equivoqué al darte la síntasis de la función... La síntasis correcta es esta:

InStr(posicion_inicio, Cadena_donde_buscar, Caracter_buscado)

La Posicion_inicio no es un dato obligatorio... por defecto, asume que es el primer carácter, por lo tanto, solo tienes que cambiar la síntasis tal que así:

Posicion = InStr([Nombre_Apellido], "-")

El ejemplo que te indiqué anteriormente, quedará ahora así:

Datos="David NILSSON (SWE) - 16 Apr 1987"

Posicion = InStr("-", Datos)   ' -Esto busca la posicion del caracter guion en la cadena "Datos"

Fch_Nacimiento= Right(Datos, Posicion+1)

Otros_Datos = Left(datos, Posición-1,)  ' - Esto contendrá el nombre y el pais

Posicion2 = InStr(Otros_Datos, ")" )  '-Ahora buscamos el parentesis del pais'

Pais= Right(Otros_Datos, Posicion2)   '-Devolverá el pais, incluido el paréntesis

Posición3= InStr(Otros_Datos, " " )  '-Buscamos el primer espacio entre nombre y apellidos

Nombre=Left(Otros_Datos, Posicion3)

Apellido=Right(Otros_Datos, Posicion3-1)

Disculpa mi error... Trabajo también con SQL y esta función tiene la síntasis cambiada para SQL.

Muchas gracias de nuevo Gomzky. Ahora funciona perfectamente.

Con alguna modificación por mi parte. Los campos quedarían así:

Posicion: InStr([Nombre_apellido];"-")

Posicion2: InStr([NOMBRE_APELLIDO];")")

Posicion3: InStr([NOMBRE_APELLIDO];" ")

NAC: Mid([NOMBRE_APELLIDO];[Posicion2]-3;3)

FechaNac: Right([NOMBRE_APELLIDO];11)

Nombre: Left([NOMBRE_APELLIDO];[Posicion3]-1)

Apellido: Mid([NOMBRE_APELLIDO];[Posicion3]+1;([Posicion2]-5)-([Posicion3]+1))

No sé si es lo más académico pero funciona.

Saludos.

Carlos.

Lo importante es que al leer el código se entienda bien... Dentro de 5 años, quizás tengas que cambiar algo de este código, y si fuese enrevesado, te costaría mucho más tiempo y esfuerzo.

Pienso que está muy bien... Yo también pensé en introducir el Mid, pero al final opté por extraer la cadena a otra cadena más pequeña y volver a partirlo en dos, ya que solo tenía que utilizar Left y Right y pensé que para ti sería más fácil de entender... Pero si lo entendiste de todos modos, felicidades... Que funcione bien, es lo que importa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas