Separar texto de una columna en varias

Tengo unas tablas con direcciones para importar que a veces no traen separados todos los campos y quisiera separlos al menos en 3 campos. Ilustraré con un ejemplo que es más rápido...
c/ Larga, 3 cp 41001 Sevilla > quisiera obtener:
c/larga3 / 41001 / sevilla en tres columnas.
He conseguido hacerlo en Word usando reemplazar:Cuadro buscar: ^#^#^#^#^#  (busca 5 digitos consecutivos)
Cuadro reemplazar: y posteriormente separando texto en columnas en excel mediante el separador Me gustaría saber como automatizar el proceso desde access que es el destino final de los datos.

1 respuesta

Respuesta
1
¿Qué extensión tienen las tablas que quieres importar?
En access cuando importas una tabla te sale un asistente, en él puedes elegir si el ancho es fijo o delimitado, cual sería el delimitador etc. Después, en opciones avanzadas, puedes guardar la expecificación de importación, esta especificación es la que utilizaremos para automatizar el proceso desde código. Pero lo primero que hay que saber es si es .txt .csv etc.
Las tablas que se importan normalmente vienen en excel, pero no siempre traen el mismo formato. Ya tengo implementado un código que importa automáticamente todas las tablas. El problema me surge cuando la tabla origen no está debidamente estructurada y me aparecen los tres campos unificados. Porque en ese caso tengo que realizar la separación manualmente previamente a la importación.
Los campos más frecuentes son nombre;apellidos;cargo;empresa;dirección;cp;localidad;provincia
Muchísimas gracias por su ayuda
Saludos
Si he entendido bien, generalmente las tablas vienen separadas por el delimitador ; pero hay veces que los campos dirección cp localidad provincia vienen juntos, sin delimitador.
¿Es así?, si es este el caso yo me plantearía una vez importado, utilizar la función EnCad para obtener las posiciones de corte, después con la función Medio() extraería las distintas cadenas para insertarlas en sus campos correspondientes.
Por ejemplo como la dirección es hasta que hay un espacio y cp haría:
Medio([NombreCampo];1;EnCad(1;[NombreCampo];" cp")) de esta forma obtendría la dirección.
Para el código postal:
Medio([NombreCampo];EnCad(1;[NombreCampo];" cp")+1;5)
Buenas noches:
Es como has entendido.
Voy a probar mañana las funciones que me indicas. Muy interesante tu aportación. Una duda más...
Las direcciones pueden venir sin el cp (más veces que con el), ¿se puede usar con la función Encad para localizar 5 dígitos consecutivos en lugar del texto " cp". He estado buscando y existe también una función Izq que captura el contenido a la izquierda del indicador.
No es tan fácil como pensaba...
Gracias.
Saludos
Pues no, no es tan fácil. Para automatizar unas importaciones es primordial que los archivos siempre tengan la misma estructura, sino...
Efectivamente existe la función Izquierda (Izq) y la función Derecha (Der), pero estas funciones nos dan los por registros a la izquierda o a la derecha, sin posibilidad de decirles por cual carácter empiezan, (la función Izq() estaría bien por ejemplo si la cadena empezase por el código, porque pondrías Izq([NombreCampo];5))para ello esta la función
 Medio(NombreCampo;CaracterPorElQueEmpieza;NumeroDeCaracteresQueQueremos)
Puedes preguntar, mediante código, si tiene los dígitos " cp":
If EnCad(1;[NombreCampo];" cp")=o then
Si la función EnCad devuelve 0 es que no encuentra la cadena
Else
Si tiene la cadena " cp"
End If
Si no tiene la cadena " cp" yo jugaría con los blancos:
EnCad(1;[NombreCampo];" "))
Sabiendo que el número del domicilio lo va a sacar independientemente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas