<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Docs Jmini &#187; csv</title>
	<atom:link href="http://docs.jmini.fr/mot-cle/csv/feed" rel="self" type="application/rss+xml" />
	<link>http://docs.jmini.fr</link>
	<description>docs.jmini.fr</description>
	<lastBuildDate>Thu, 18 Feb 2010 09:47:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Un script pour convertir un fichier CSV en requêtes SQL</title>
		<link>http://docs.jmini.fr/code/script-convertir-csv-en-sql</link>
		<comments>http://docs.jmini.fr/code/script-convertir-csv-en-sql#comments</comments>
		<pubDate>Mon, 06 Aug 2007 05:58:00 +0000</pubDate>
		<dc:creator>Jérémie Bresson</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://docs.jmini.fr/?p=14</guid>
		<description><![CDATA[Voici un petit script AWK pour convertir un fichier csv (provenant d&#8217;Excel ou de n&#8217;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&#8217;importe quel système UNIX, et Mac OS X en particulier.
Pour en savoir plus sur l&#8217;utilisation [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit script AWK pour convertir un fichier csv (provenant d&#8217;Excel ou de n&#8217;importe quel autre programme) en une requête SQL (pour remplir une base de données MySQL avec phpMyAdmin par exemple).</p>
<p>Il fonctionne grâce à AWK, donc sur pratiquement n&#8217;importe quel système UNIX, et Mac OS X en particulier.</p>
<p>Pour en savoir plus sur l&#8217;utilisation de AWK dans Mac OS X, je vous invite à consulter l&#8217;article <a href="http://docs.jmini.fr/pas-a-pas/se-servir-de-awk-dans-mac-os-x" title="Se servir de AWK dans Mac OS X">Se servir de AWK dans Mac OS X</a></p>
<p>Le script :</p>
<div class="markCode"><div class="boxCode"><code>
<pre class="Clr_Code"><span class="Clr_Comment">#!/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</span>

<span class="Clr_Anchor">BEGIN</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Var">FS</span>=<span class="Clr_String">"<span class="Clr_Operator">;</span>"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">RS</span>=<span class="Clr_String">"\n"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">OFS</span>=<span class="Clr_String">""</span><span class="Clr_Operator">;</span>
	<span class="Clr_Func">printf</span> <span class="Clr_String">"-- csvToSql : debut du script sql\n"</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Operator">{</span>
	<span class="Clr_Func">gsub</span>(<span class="Clr_String">/'/</span><span class="Clr_Operator">,</span><span class="Clr_String">"\\'"</span><span class="Clr_Operator">,</span> <span class="Clr_Var">$0</span>)<span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Var">NR</span>==<span class="Clr_Int">1</span> <span class="Clr_Operator">{</span>
	li=<span class="Clr_String">"INSERT INTO  `"</span> <span class="Clr_Var">$1</span> <span class="Clr_String">"` (  `"</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>
<span class="Clr_Var">NR</span>==<span class="Clr_Int">2</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Var">nb_champ</span>=<span class="Clr_Var">NF</span><span class="Clr_Operator">;</span>
	<span class="Clr_KeyWord">for</span>(<span class="Clr_Var">i</span>=<span class="Clr_Int">1</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span>&lt;<span class="Clr_Var">NF</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span><span class="Clr_Operator">++</span>)
		<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"` ,  `"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"` ) "</span><span class="Clr_Operator">;</span>
	<span class="Clr_Func">print</span> <span class="Clr_Var">li</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">li</span>=<span class="Clr_String">"VALUES "</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Var">NR</span>&gt;<span class="Clr_Int">2</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_String">"('"</span>
	<span class="Clr_KeyWord">for</span>(<span class="Clr_Var">i</span>=<span class="Clr_Int">1</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span>&lt;<span class="Clr_Var">nb_champ</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span><span class="Clr_Operator">++</span>)
		<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"',  '"</span><span class="Clr_Operator">;</span>

	<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"')"</span><span class="Clr_Operator">;</span>

	<span class="Clr_Func">print</span> <span class="Clr_Var">li</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">li=<span class="Clr_String">", "</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Anchor">END</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Func">print</span> <span class="Clr_String">";"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Func">print</span> <span class="Clr_String">"-- csvToSql : fin du script sql \n"</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>
</span></pre>
<p></code></div></div>
<p>Retrouvez tous les fichiers de démonstration dans une archive zip : <a href="http://docs.jmini.fr/wp-content/uploads/2008/11/csvsql.zip" title="csvsql" class="attachment_file">csvsql.zip</a></p>
<h2>Utilisation du script :</h2>
<h3>1) Préparer le fichier CSV</h3>
<p>Peu importe la manière dont vous obtenez votre fichier CSV (copier-coller, export Excel&#8230;) vous devez vous assurer qu&#8217;il respecte bien le format prévu par le script. Si ce n&#8217;est pas le cas, un éditeur texte et une série de rechercher-remplacer devrait faire l&#8217;affaire. Pour les utilisateurs avertis, il est aussi possible de changer le script AWK&#8230;</p>
<p>Dans la configuration du script actuelle, il faut que fichier soit construit de la manière suivante :</p>
<ul>
<li>Le séparateur de champs doit être un point-virgule &laquo;&nbsp;;&nbsp;&raquo;</li>
<li>La première ligne ne doit contenir qu&#8217;un champ : le nom de la table</li>
<li>La deuxième ligne doit contenir les noms des champs de la table SQL</li>
<li>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)</li>
</ul>
<p>Exemple : fichier panier.csv :</p>
<div class="markCode"><div class="boxCode"><code>panier<br />
id;fruit;nombre;etat<br />
1;pomme;23;bon<br />
2;poire;4;mauvais<br />
3;banane;7;parfait</code></div></div>
<p>Ce fichier s&#8217;obtient très facilement avec Excel en remplissant correctement une feuille du classeur :</p>
<div id="attachment_21" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-21" title="capture_excel" src="http://docs.jmini.fr/wp-content/uploads/2008/08/img46b194dcb445e-300x121.png" alt="Visualisation du fichier CSV dans Excel" width="300" height="121" /><p class="wp-caption-text">Visualisation du fichier CSV dans Excel</p></div>
<p>Pour générer le fichier CSV, il suffit de faire : <strong>Menu &gt; Fichier &gt; Enregistrer sous&#8230;</strong> puis de choisir dans le format de fichier « CSV (séparateur : point-virgule) »</p>
<div class="markNote"><blockquote><strong>Attention :</strong> parfois, le fichier généré par Excel ne fonctionne pas avec AWK. Il suffit d&#8217;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&#8217;on réenregistre.</blockquote></div>
<p>Enregistrer le fichier dans le répertoire de travail (ici un dossier csvsql sur le bureau).</p>
<h3>2) Préparation du script</h3>
<p>Copier le script ci-dessus dans un fichier texte nommé csvToSql.awk et rendez-le exécutable (méthode décrite dans l&#8217;<a href="http://docs.jmini.fr/pas-a-pas/se-servir-de-awk-dans-mac-os-x" title="Se servir de AWK dans Mac OS X">article sur l&#8217;utilisation d&#8217;AWK</a>)</p>
<p>ou utilisez le script de l&#8217;archive Zip de démonstration</p>
<p>Le plus simple est d&#8217;avoir ce fichier de script dans le répertoire de travail (dans notre cas, toujours le dossier csvsql sur le bureau).</p>
<h3>3) Préparer le terminal</h3>
<p>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) <div class="markCode"><div class="boxCode"><code>$ cd ~/Desktop/csvsql/</code></div></div></p>
<h3>4) Lancer le script :</h3>
<p>Il suffit de taper dans le terminal la commande : <div class="markCode"><div class="boxCode"><code>$ ./csvToSql.awk panier.csv</code></div></div></p>
<p>On obtient dans terminal la requête SQL que l&#8217;on peut réutiliser à l&#8217;endroit adéquat (notamment dans PhpMyAdmin)</p>
<div class="markCode"><div class="boxCode"><code>
<pre class="Clr_Code"><span class="Clr_Comment">-- csvToSql : debut du script sql</span>
<span class="Clr_KeyWord">INSERT INTO</span>  <span class="Clr_String">`panier`</span> <span class="Clr_Operator">(</span>  <span class="Clr_String">`id`</span> <span class="Clr_Operator">,</span>  <span class="Clr_String">`fruit`</span> <span class="Clr_Operator">,</span>  <span class="Clr_String">`nombre`</span> <span class="Clr_Operator">,</span>  <span class="Clr_String">`etat`</span> <span class="Clr_Operator">)</span>
<span class="Clr_KeyWord">VALUES</span> <span class="Clr_Operator">(</span><span class="Clr_String">'1'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'pomme'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'23'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'bon'</span><span class="Clr_Operator">)</span><span class="Clr_Operator">,</span> <span class="Clr_Operator">(</span><span class="Clr_String">'2'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'poire'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'4'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'mauvais'</span><span class="Clr_Operator">)</span><span class="Clr_Operator">,</span> <span class="Clr_Operator">(</span><span class="Clr_String">'3'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'banane'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'7'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'parfait'</span><span class="Clr_Operator">)</span><span class="Clr_Operator">;</span>
<span class="Clr_Comment">-- csvToSql : fin du script sql</span></pre>
<p></code></div></div>
<hr />
En annexe voici une requête permettant de créer la structure de la table correspondant à notre exemple.</p>
<div class="markCode"><div class="boxCode"><code>
<pre class="Clr_Code"><span class="Clr_Comment">-- Creation de la table</span>
<span class="Clr_KeyWord">CREATE TABLE</span>  <span class="Clr_String">`panier`</span> <span class="Clr_Operator">(</span>
<span class="Clr_String">`id`</span> <span class="Clr_KeyWord">INT</span><span class="Clr_Operator">(</span> <span class="Clr_Int">4</span> <span class="Clr_Operator">)</span> <span class="Clr_KeyWord">NOT NULL</span> AUTO_INCREMENT <span class="Clr_Operator">,</span>
<span class="Clr_String">`fruit`</span> <span class="Clr_KeyWord">VARCHAR</span><span class="Clr_Operator">(</span> <span class="Clr_Int">20</span> <span class="Clr_Operator">)</span> <span class="Clr_Operator">,</span>
<span class="Clr_String">`nombre`</span> <span class="Clr_KeyWord">INT</span><span class="Clr_Operator">(</span> <span class="Clr_Int">8</span> <span class="Clr_Operator">)</span> DEFAULT  <span class="Clr_String">'0'</span> <span class="Clr_KeyWord">NOT NULL</span> <span class="Clr_Operator">,</span>
<span class="Clr_String">`etat`</span> <span class="Clr_KeyWord">VARCHAR</span><span class="Clr_Operator">(</span> <span class="Clr_Int">20</span> <span class="Clr_Operator">)</span> <span class="Clr_Operator">,</span>
<span class="Clr_KeyWord">PRIMARY KEY</span> <span class="Clr_Operator">(</span>  <span class="Clr_String">`id`</span> <span class="Clr_Operator">)</span>
<span class="Clr_Operator">)</span> TYPE <span class="Clr_Operator">=</span> MYISAM COMMENT <span class="Clr_Operator">=</span>  <span class="Clr_String">'Panier de fruits'</span><span class="Clr_Operator">;</span></pre>
<p></code></div></div>
]]></content:encoded>
			<wfw:commentRss>http://docs.jmini.fr/code/script-convertir-csv-en-sql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
