Pregunta

Necesito importar archivos de texto grandes (24 MB) a una tabla MySQL. Cada línea se ve así:

1 1 0.008  0  0  0  0  0                                    

Hay uno o más espacios después de cada campo, y el último campo está seguido de unos 36 espacios antes de la nueva línea.

¿Cómo importo un archivo de este tipo en MySQL? De la documentación parece que LOAD DATA espera que todos los campos terminen exactamente por la misma cadena. Lo he intentado

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ' ';

pero MySQL interpretará una secuencia de más de un espacio como delimitación de un campo vacío.

¿Alguna idea?

¿Fue útil?

Solución

Si estás en Unix / Linux, puedes ponerlo a través de sed.

abre un terminal y escribe:

sed 's/ \+/ /g' thefile > thefile.new

esto reemplaza todas las secuencias de espacios múltiples con un espacio.

Otros consejos

Si estás en Windows, solo usa Excel.

Excel importará un archivo delimitado por espacios en blanco (marque la casilla 'tratar los delimitadores posteriores como uno' en el menú de importación).

Luego, simplemente puede guardar el archivo como un CSV de Excel e importarlo a MySQL usando:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 

También puede usar el mismo comando publicado por Jauco para cambiar el delimitador a ';' o \ n. Eso también ayudaría.

¿No hay manera de que puedas hacer esto pragmáticamente? Un simple script PHP podría cargar el archivo, dividirlo por espacios y hacer una inserción en ningún momento:

<?php

$db = mysql_connect('host', 'user', 'password')
or die('Failed to connect');
mysql_select_db('database', $db);

$fileHandle= @fopen("import.file", "r");
if ($fileHandle) {
    while (!feof($fileHandle)) {
        $rawLine = fgets($fileHandle, 4096);

        $columns = preg_split("/\s+/", $rawLine);

        //Construct and run an INSERT statement here ...   

    }
    fclose($fileHandle);
}

?>

Editar Dicho esto, Jakal's la sugerencia es mucho mejor;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top