2008-10-01 17 views
5

Necesito importar archivos de texto de gran tamaño (24 MB) en una tabla de MySQL. Cada línea tiene el siguiente aspecto:¿Cómo importo un archivo de texto delimitado por espacios en blanco en MySQL?

1 1 0.008 0 0 0 0 0          

hay uno o más espacios después de cada campo, y el último campo es atado por cerca de 36 espacios antes del salto de línea.

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

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

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

¿Alguna idea?

Respuesta

9

Si está en Unix/Linux, puede hacerlo a través de sed.

abrir un terminal y tipo:

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

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

0

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

+0

realmente; MySQL está bastante contento con los espacios como delimitadores de campo, aquí solo son varios los que son un problema. ¡Y usar LF lo empeoraría, ya que serían los mismos que los delimitadores de registro! –

0

¿No hay forma de que pueda hacerlo de forma pragmática? Un simple script PHP sería capaz de cargar el archivo en, dividida por espacios, y hacer un inserto en ningún momento a todos:

<?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 sugerencia es mucho más ordenado;)

2

Si está en Windows, simplemente use Excel.

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

A continuación, puede guardar el archivo como un archivo CSV desde Excel e importar en MySQL usando:

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