docs.jmini.fr

Les docs Jmini

Les docs jmini regroupent mes notes personnelles plus ou moins détaillées que je souhaite partager. Compilations de liens, tutoriels, réalisations pense-bêtes, morceaux de codes...
Autant d’informations que je retrouve sur mon site et qui pourront vous être utiles. En savoir plus...



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

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 : , , ,

Cet article est dans la catégorie : Code


© 2007-2024 Jérémie Bresson | jmini.fr | Ce site est sous licence Creative Commons - en savoir plus