2008-10-01 7 views
5

J'ai besoin d'importer des fichiers texte volumineux (24 Mo) dans une table MySQL. Chaque ligne ressemble à ceci:Comment importer un fichier texte délimité par des espaces blancs dans MySQL?

1 1 0.008 0 0 0 0 0          

Il y a un ou plusieurs espaces après chaque champ, et le dernier champ est tailed d'environ 36 places avant le saut de ligne.

Comment importer un tel fichier dans MySQL? D'après la documentation, il semble que LOAD DATA attende que tous les champs soient terminés par exactement la même chaîne. Mais j'ai essayé

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

mais MySQL interprétera une séquence de plus d'un espace comme délimitant un champ vide.

Des idées?

Répondre

9

Si vous utilisez unix/linux, vous pouvez le passer à travers sed.

ouvrir un terminal et le type:

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

cela remplace toutes les séquences de plusieurs espaces avec un espace.

0

Vous pouvez également utiliser la même commande affichée par Jauco pour remplacer le délimiteur par ';' ou \ n. Cela aiderait aussi.

+0

Pas vraiment; MySQL est assez content des espaces comme délimiteurs de champs, ce sont seulement les multiples qui posent problème ici. Et l'utilisation de LF le rendrait pire car ils seraient alors les mêmes que les délimiteurs d'enregistrement! –

0

N'est-il pas possible de faire cela de façon pragmatique? Un simple script PHP serait en mesure de charger le fichier, divisé par des espaces et faire un insert en un rien de temps:

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

?> 

Modifier Cela dit, Jakal's suggestion est loin plus propre;)

2

Si vous utilisez Windows, utilisez simplement Excel.

Excel importera un fichier délimité par des espaces (cochez la case «traiter les délimiteurs suivants comme un seul» dans le menu d'importation).

Ensuite, vous pouvez simplement enregistrer le fichier au format CSV à partir d'Excel et importer dans MySQL en utilisant:

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