Publié par Jérémie Bresson dans les docs Jmini (http://docs.jmini.fr) à l’adresse (http://docs.jmini.fr/code/script-convertir-csv-en-sql).
Dernière mise à jour : Lundi 6 août 2007
Un script pour convertir un fichier CSV en requêtes SQL
Voici un petit script AWK pour convertir un fichier csv (provenant d’Excel ou de n’importe quel autre programme) en une requête SQL (pour remplir une base de données MySQL avec phpMyAdmin par exemple).
Il fonctionne grâce à AWK, donc sur pratiquement n’importe quel système UNIX, et Mac OS X en particulier.
Pour en savoir plus sur l’utilisation de AWK dans Mac OS X, je vous invite à consulter l’article Se servir de AWK dans Mac OS X
Le script :
#!/usr/bin/awk -f
# Script de conversion d'un fichier .csv Excel en un script d'insertion SQL.
# version 1
# http://jmini.fr/
# STRUCTURE DU FICHIER :
# separateur : ;
# premiere ligne : nom de la table
# deuxieme ligne : nom des champs
# lignes suivantes : enregistrements
BEGIN {
FS=";";
RS="\n";
OFS="";
printf "-- csvToSql : debut du script sql\n";
}
{
gsub(/'/,"\\'", $0);
}
NR==1 {
li="INSERT INTO `" $1 "` ( `";
}
NR==2 {
nb_champ=NF;
for(i=1; i<NF; i++)
li=li $i "` , `";
li=li $i "` ) ";
print li;
li="VALUES ";
}
NR>2 {
li=li "('"
for(i=1; i<nb_champ; i++)
li=li $i "', '";
li=li $i "')";
print li;
li=", ";
}
END {
print ";";
print "-- csvToSql : fin du script sql \n";
}
Retrouvez tous les fichiers de démonstration dans une archive zip : csvsql.zip
Utilisation du script :
1) Préparer le fichier CSV
Peu importe la manière dont vous obtenez votre fichier CSV (copier-coller, export Excel…) vous devez vous assurer qu’il respecte bien le format prévu par le script. Si ce n’est pas le cas, un éditeur texte et une série de rechercher-remplacer devrait faire l’affaire. Pour les utilisateurs avertis, il est aussi possible de changer le script AWK…
Dans la configuration du script actuelle, il faut que fichier soit construit de la manière suivante :
- Le séparateur de champs doit être un point-virgule « ; »
- La première ligne ne doit contenir qu’un champ : le nom de la table
- La deuxième ligne doit contenir les noms des champs de la table SQL
- Les lignes suivantes doivent contenir les enregistrements (et donc le même nombre de champs que la deuxième ligne, s’il y en a plus, ils seront ignorés)
Exemple : fichier panier.csv :
panier
id;fruit;nombre;etat
1;pomme;23;bon
2;poire;4;mauvais
3;banane;7;parfait
Ce fichier s’obtient très facilement avec Excel en remplissant correctement une feuille du classeur :

Visualisation du fichier CSV dans Excel
Pour générer le fichier CSV, il suffit de faire : Menu > Fichier > Enregistrer sous… puis de choisir dans le format de fichier « CSV (séparateur : point-virgule) »
Attention : parfois, le fichier généré par Excel ne fonctionne pas avec AWK. Il suffit d’ouvrir le fichier CSV dans un éditeur de texte, de tout sélectionner, de copier la sélection et de coller le texte dans un nouveau fichier que l’on réenregistre.
Enregistrer le fichier dans le répertoire de travail (ici un dossier csvsql sur le bureau).
2) Préparation du script
Copier le script ci-dessus dans un fichier texte nommé csvToSql.awk et rendez-le exécutable (méthode décrite dans l’article sur l’utilisation d’AWK)
ou utilisez le script de l’archive Zip de démonstration
Le plus simple est d’avoir ce fichier de script dans le répertoire de travail (dans notre cas, toujours le dossier csvsql sur le bureau).
3) Préparer le terminal
Ouvrer le terminal et placer vous dans le répertoire de travail contenant le script AWK (csvToSql.awk) et le fichier source (dans notre exemple panier.csv)
$ cd ~/Desktop/csvsql/
4) Lancer le script :
Il suffit de taper dans le terminal la commande :
$ ./csvToSql.awk panier.csv
On obtient dans terminal la requête SQL que l’on peut réutiliser à l’endroit adéquat (notamment dans PhpMyAdmin)
-- csvToSql : debut du script sql
INSERT INTO `panier` ( `id` , `fruit` , `nombre` , `etat` )
VALUES ('1', 'pomme', '23', 'bon'), ('2', 'poire', '4', 'mauvais'), ('3', 'banane', '7', 'parfait');
-- csvToSql : fin du script sql
En annexe voici une requête permettant de créer la structure de la table correspondant à notre exemple.
-- Creation de la table
CREATE TABLE `panier` (
`id` INT( 4 ) NOT NULL AUTO_INCREMENT ,
`fruit` VARCHAR( 20 ) ,
`nombre` INT( 8 ) DEFAULT '0' NOT NULL ,
`etat` VARCHAR( 20 ) ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM COMMENT = 'Panier de fruits';
Voir aussi
Les mots-clés de cet article : awk, csv, programmation, sql
Cet article est dans la catégorie : Code