Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Load data infile

Estas en el tema de Load data infile en el foro de Mysql en Foros del Web. Hola familia tengo un problema al importar un archivo a mi BBDD en el archivo los campos están separados por ; y los datos entre ...
  #1 (permalink)  
Antiguo 29/06/2009, 13:00
 
Fecha de Ingreso: mayo-2004
Ubicación: Barcelona
Mensajes: 200
Antigüedad: 19 años, 11 meses
Puntos: 0
Load data infile

Hola familia

tengo un problema al importar un archivo a mi BBDD
en el archivo los campos están separados por ; y los datos entre comillas

Código:
LOAD DATA INFILE 'archivo' INTO TABLE 'mitabla'
  FIELDS TERMINATED BY ';' ENCLOSED BY ' " ' ESCAPED BY '\\'
  LINES TERMINATED BY '\n';
en principio lo hace bien, pero hay una linea en el archivo que es así:

Código:
"campo1";"campo2";"campo3 "noseq"";"campo4";"campo5";
y esta linea me la importa mal ya que dentro del campo3 también hay comillas dobles :S
yo pensaba que con el ESCAPED BY se solucionaría pero sigue igual.

alguna idea?

Gracias amigos,
  #2 (permalink)  
Antiguo 29/06/2009, 13:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Load data infile

Escapa las comillas en el texto:

"campo1";"campo2";"campo3 \"noseq\"";"campo4";"campo5";

y luego importa

LOAD DATA INFILE 'archivo' INTO TABLE 'mitabla'
FIELDS TERMINATED BY ';' ENCLOSED BY ' " ' ESCAPED BY '\\'
LINES TERMINATED BY '\n';
  #3 (permalink)  
Antiguo 29/06/2009, 13:58
 
Fecha de Ingreso: mayo-2004
Ubicación: Barcelona
Mensajes: 200
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Load data infile

gracias jurena,
pero...
me podrías dar una pista de como hacerlo?

es que el archivo es generado cada día, y por tanto escapar las comillas manualmente no es una opción viable, tendría que ser un proceso automático...

gracias!
  #4 (permalink)  
Antiguo 29/06/2009, 14:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Load data infile

Es importante que nos digas cómo generas eso, porque si evitas el uso de comillas para separar campos cuando exportes a ese archivo de texto, y te limitas al ; te bastará con eliminar ENCLOSED BY ' " ' de la orden.

campo1;campo2;campo3 "noseq";campo4;campo5;


LOAD DATA INFILE 'archivo' INTO TABLE 'mitabla'
FIELDS TERMINATED BY ';' ESCAPED BY '\\'
LINES TERMINATED BY '\n';

De todas formas, dinos cómo generas ese archivo de texto o csv con separación de punto y coma y comillas.
EDITO: en otras palabras, o no añades las comillas de cierre de campo y eliminas campo encerrado por " en el LOAD, o le añades la barra de escape sólo a esas otras comillas del texto, y en el LOAD usas el escape.
Tal vez se pueda de otro modo, pero yo lo desconozco.

Última edición por jurena; 29/06/2009 a las 14:51
  #5 (permalink)  
Antiguo 29/06/2009, 16:50
 
Fecha de Ingreso: mayo-2004
Ubicación: Barcelona
Mensajes: 200
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Load data infile

yo no soy el que genera los archivos, eso lo hace otro programa y sus programadores me facilitan los archivos,
sin embargo yo les puedo decir que formato necesito, pero... hay otro problema, ya que los campos pueden contener punto y coma, comas, comillas dobles, comillas simples etc..

entonces tendría el mismo problema no?
son campos que rellenan los usuarios y por tanto contienen de todo :S

puedo decir que los separen por punto y coma, y los datos entre otro caracter "raro",
que separación de los datos me aconsejas?

mil gracias!!
  #6 (permalink)  
Antiguo 29/06/2009, 23:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Load data infile

Creo que lo mejor es que los programadores pongan la barra de escape delante de los caracteres que lo necesiten y que estén dentro del campo que exportan. No sé con qué programa trabajarán, pero seguro que cuentan con una función para hacerlo. Tú luego haces el LOAD indicando que el campo está encerrado entre comillas dobles (que no estarán escapadas) y que el escape es "\\", como tenías al principio. En lugar de hacerlo a mano, lo harán los programadores.
  #7 (permalink)  
Antiguo 30/06/2009, 14:45
 
Fecha de Ingreso: mayo-2004
Ubicación: Barcelona
Mensajes: 200
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Load data infile

Gracias,

al final los que generan el archivo pondrán las barras de escape, XD

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:15.