2008-10-01 31 views
5

Ho bisogno di importare file di testo più grandi (24MB) in una tabella MySQL. Ogni linea è simile al seguente:Come posso importare un file di testo delimitato da spazi bianchi in MySQL?

1 1 0.008 0 0 0 0 0          

ci sono uno o più spazi dopo ogni campo, e l'ultimo campo è tallonato da circa 36 spazi prima del ritorno a capo.

Come si importa un file di questo tipo in MySQL? Dalla documentazione sembra che LOAD DATA si aspetta che tutti i campi vengano terminati esattamente dalla stessa stringa. Ho provato

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

ma MySQL interpretare una sequenza di più di uno spazio come delimitare un campo vuoto.

Qualche idea?

risposta

9

Se si sta su unix/linux, è possibile passare attraverso sed.

aprire un terminale e digitare:

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

questa sostituisce tutte le sequenze di spazi multipli con uno spazio.

0

È anche possibile utilizzare lo stesso comando inviato da Jauco per modificare il delimitatore su ";" o \ n. Ciò aiuterebbe anche.

+0

davvero; MySQL è abbastanza contento degli spazi come delimitatori di campo, sono solo i multipli a costituire un problema. E l'uso di LF lo renderebbe peggiore in quanto sarebbero uguali ai delimitatori di record! –

0

Non c'è modo di farlo in modo pragmatico? Un semplice script PHP sarebbe in grado di caricare il file in, raggruppati per spazi, e fare un inserto in un batter d'occhio:

<?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); 
} 

?> 

Modifica Detto questo, Jakal's suggerimento è di gran lunga più ordinato;)

2

Se sei su Windows, usa solo Excel.

Excel importerà un file delimitato da spazi bianchi (selezionare la casella "tratta i delimitatori successivi come una" dal menu di importazione).

allora si può semplicemente salvare il file come un CSV da Excel e importare in MySQL usando:

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