Bon, la solution pour ceux que ça intéresse.
D'abord, il faut des outils. Manipuler des gros fichiers (mesurés en dizaines ou en centaines de Mo) ça ne se fait pas au bloc-note. Donc on a deux possibilités. Utiliser
SED ou
GAWK. Ces outils s'utilisent en ligne de commande. On trouve ces outils sur Sourceforge pour Windows. Pour linux, sachez que ces outils sont généralement déjà installé et directement utilisables dans une console.
Pour mémoire : le fichier à manipuler est un dump de base de données. Les champs sont séparés par des tabulations et les lignes se terminent par un retour de chariot.
L'importation dans une base de données MySQL pose un problème avec certains champs typés lorsque la valeur est absente. Le problème consiste donc à insérer un "\N" entre deux tabulations consécutives. (Ne pas confondre "\N" et "\n" : le premier a une signification bien précise pour MySQL et sera lu comme "NULL" et non comme un retour de chariot)
Voici quatre lignes exemple :
Code : Tout sélectionner
FR 10 1 3823066 3823067 EUR 0.00 0.00 19.60 0 1 0 0
FR 10 2 4265487 4265488 EUR 0.00 0.00 19.60 0 1 0 0
FR 10 3 7677524 7677525 EUR 0.00 0.00 19.60 0 1 0 0
FR 10 4 8296231 8296232 EUR 0.00 0.00 19.60 0 1 0 0
Après avoir installé SED et GAWK, ouvrez une invite de commande Windows (ou une console Linux, ça doit fonctionner aussi). Sous Windows, déplacez vous dans le répertoire bin là où est installé GAWK :
Ensuite, tapez la ligne suivante dans l'invite de commande:
Code : Tout sélectionner
gawk "{ligne=gensub(/\t(\t|$)/, \"\t\\\\N\\1\", \"g\", $0); print gensub(/\t(\t|$)/, \"\t\\\\N\\1\", \"g\", ligne)}" nom_fichier_entree.txt > nom_fichier_sortie.txt
Là où sont les noms des fichiers, vous devez pointer dessus donc en mettant le chemin complet. ce qui signifie par exemple qu'au lieu de "nom_fichier_entree.txt", il faudra inscrire "C:\Temp\fichiers\nom_fichier_entree.txt" et pareil pour le fichier de sortie.
Résultat :
Code : Tout sélectionner
FR 10 1 3823066 3823067 EUR 0.00 0.00 19.60 \N \N 0 1 0 0 \N
FR 10 2 4265487 4265488 EUR 0.00 0.00 19.60 \N \N 0 1 0 0 \N
FR 10 3 7677524 7677525 EUR 0.00 0.00 19.60 \N \N 0 1 0 0 \N
FR 10 4 8296231 8296232 EUR 0.00 0.00 19.60 \N \N 0 1 0 0 \N
Ceci est un extrait d'un fichier qui fait 32Mo, la conversion a pris moins d'une minute. J'ai testé ensuite avec mon ficier de 660Mo : durée de la transformation de 10mn10' : Chapeau et encore merci à
Ripat pour son très précieux support
