<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.causeries-numeriques.fr/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Causeries numériques - ruby</title>
  <link>http://www.causeries-numeriques.fr/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 07 Feb 2012 14:32:21 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Un autre uniligne en Ruby</title>
    <link>http://www.causeries-numeriques.fr/post/2008/11/11/Un-autre-uniligne-en-Ruby</link>
    <guid isPermaLink="false">urn:md5:2b21f1043579106988ea9660a1e72138</guid>
    <pubDate>Tue, 11 Nov 2008 21:44:00 +0100</pubDate>
    <dc:creator>jb</dc:creator>
        <category>Des pingouins et des hommes</category>
        <category>ruby</category><category>uniligne</category>    
    <description>    &lt;p&gt;Renommer les fichiers qui composent un répertoire et souvent une galère à la main. J'ai un script qui me permet de le faire, mais je voulais voir si on pouvait le faire en une ligne de Ruby, la réponse est là&amp;nbsp;:&lt;/p&gt;
&lt;code class=&quot;ruby&quot;&gt;ruby -e 'Dir.&lt;span style=&quot;color:#9900CC;&quot;&gt;glob&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;*.txt&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; |f| File.&lt;span style=&quot;color:#9900CC;&quot;&gt;rename&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;f,f.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;gsub&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;/^&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;\d\d&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt; /,%q&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;\&lt;span style=&quot;color:#006666;&quot;&gt;1&lt;/span&gt; - &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;L'option &lt;code&gt;-e&lt;/code&gt; permet de faire exécuter la chaîne de caractères par l'interpréteur ruby. Pour éviter que &lt;code&gt;bash&lt;/code&gt; n'interprète les instructions on les places entre apostrophes (ça permet de garder les guillemets pour la suite du programme).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;La méthode &lt;code&gt;glob&lt;/code&gt; de la classe &lt;code&gt;Dir&lt;/code&gt; liste tous les fichiers correspondant au motif placé en argument (ici, tous les fichiers en &lt;code&gt;.txt&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Un bloc est utilisé avec la méthode &lt;code&gt;each&lt;/code&gt;, ce bloc est délimité par les accolades, la variable &lt;code&gt;f&lt;/code&gt; prendra le nom d'un des fichiers à chaque itération.&lt;/li&gt;
&lt;li&gt;La méthode &lt;code&gt;rename&lt;/code&gt; de la classe &lt;code&gt;File&lt;/code&gt; est utilisée pour renommer le fichier.&lt;/li&gt;
&lt;li&gt;Le nouveau nom du fichier est construit à partir d'un expression régulière avec la méthode &lt;code&gt;gsub&lt;/code&gt;. Les apostrophes ne pouvant pas être utilisés, on est obligé de passer par une notation &lt;code&gt;%q&lt;a href=&quot;http://www.causeries-numeriques.fr/post/2008/11/11/[...&quot; title=&quot;[...&quot;&gt;[...&lt;/a&gt;]&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pour éviter de planter des fichiers, il est judicieux de tester la regexp avec un &lt;code&gt;puts&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;code class=&quot;ruby&quot;&gt;ruby -e 'Dir.&lt;span style=&quot;color:#9900CC;&quot;&gt;glob&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;*.txt&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; |f| &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;puts&lt;/span&gt; f+&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;-&amp;gt;&amp;quot;&lt;/span&gt;+f.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;gsub&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;/^&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;\d\d&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt; /,%q&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;\&lt;span style=&quot;color:#006666;&quot;&gt;1&lt;/span&gt; - &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;'&lt;/code&gt;


&lt;p&gt;&lt;strong&gt;edit du 13/11&lt;/strong&gt;
&lt;code&gt;glob&lt;/code&gt; peut être remplacé par &lt;code&gt;&lt;a href=&quot;http://www.causeries-numeriques.fr/post/2008/11/11/[...&quot; title=&quot;[...&quot;&gt;[...&lt;/a&gt;]&lt;/code&gt;&lt;/p&gt;
&lt;code class=&quot;ruby&quot;&gt;ruby -e 'Dir&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;*.txt&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; |f| &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;puts&lt;/span&gt; f+&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;-&amp;gt;&amp;quot;&lt;/span&gt;+f.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;gsub&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;/^&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;\d\d&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt; /,%q&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;\&lt;span style=&quot;color:#006666;&quot;&gt;1&lt;/span&gt; - &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;'&lt;/code&gt;

&lt;p&gt;c'est valable pour le &lt;code&gt;puts&lt;/code&gt; ou pour le &lt;code&gt;File.rename&lt;/code&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.causeries-numeriques.fr/post/2008/11/11/Un-autre-uniligne-en-Ruby#comment-form</comments>
      <wfw:comment>http://www.causeries-numeriques.fr/post/2008/11/11/Un-autre-uniligne-en-Ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://www.causeries-numeriques.fr/feed/rss2/comments/41</wfw:commentRss>
      </item>
    
  <item>
    <title>Uniligne en Ruby</title>
    <link>http://www.causeries-numeriques.fr/post/2008/10/20/Uniligne-en-Ruby</link>
    <guid isPermaLink="false">urn:md5:d792ba47fa861f60e214191fb6002cc7</guid>
    <pubDate>Mon, 20 Oct 2008 15:32:00 +0200</pubDate>
    <dc:creator>jb</dc:creator>
        <category>Des pingouins et des hommes</category>
        <category>ruby</category><category>uniligne</category>    
    <description>    &lt;p&gt;Mes listings d'étudiants me sont fournis au format suivant&lt;/p&gt;
&lt;pre&gt;
...
DUPONT,PAUL
DURAND,PIERRE
...
&lt;/pre&gt;

&lt;p&gt;La présentation &quot;tout en majuscules&quot; ne me plaît pas beaucoup&amp;nbsp;; je préfère une majuscule en début de nom et en début de prénom. Plutôt que m'amuser à tout faire à la main, j'ai écrit un petit &lt;a href=&quot;http://fr.wikipedia.org/wiki/Uniligne&quot;&gt;uniligne&lt;/a&gt; qui fait tout d'un coup.&lt;/p&gt;


&lt;p&gt;Pour obtenir un comportement uniligne en ruby, on utilise plusieurs options sur la ligne de commande (l'option &lt;code&gt;-e&lt;/code&gt; est obligatoire). Les principales options sont les suivantes&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-e&lt;/code&gt; permet de créer un uniligne, en spécifiant les instructions depuis la ligne de commande (les instructions sont placées entre apostrophes pour éviter que le shell ne les interprète).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt; Ruby place les instructions dans une boucle (&lt;code&gt;while gets ... end&lt;/code&gt;) en utilisant le fichier (dont le nom et placé en argument sur la ligne de commande) comme source.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt; est identique à &lt;code&gt;-n&lt;/code&gt; avec en plus un affichage de &lt;code&gt;$_&lt;/code&gt; (la ligne lue) à la fin de la boucle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L'uniligne obtenue est le suivant&amp;nbsp;:&lt;/p&gt;
&lt;code class=&quot;ruby&quot;&gt;ruby -ne '&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;puts&lt;/span&gt; $_.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt;|n| n.&lt;span style=&quot;color:#9900CC;&quot;&gt;capitalize&lt;/span&gt;!&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt; ' TD.&lt;span style=&quot;color:#9900CC;&quot;&gt;csv&lt;/span&gt; &amp;gt; TDmaj.&lt;span style=&quot;color:#9900CC;&quot;&gt;csv&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;La ligne lue (dans le fichier &lt;code&gt;TD.csv&lt;/code&gt;) est découpée en utilisant &lt;code&gt;split&lt;/code&gt; puis une boucle &lt;code&gt;each&lt;/code&gt; permet de traiter chaque élément avec &lt;code&gt;capitalize!&lt;/code&gt; pour passer que la première lettre en majuscule. Le contenu du tableau (issue du &lt;code&gt;each&lt;/code&gt;) et transformé en une chaîne en utilisant &lt;code&gt;join&lt;/code&gt; avec la virgule comme caractère de jointure. Une redirection finale (&lt;code&gt;&amp;gt; TDmaj.csv&lt;/code&gt;) envoie tout ça dans un nouveau fichier.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.causeries-numeriques.fr/post/2008/10/20/Uniligne-en-Ruby#comment-form</comments>
      <wfw:comment>http://www.causeries-numeriques.fr/post/2008/10/20/Uniligne-en-Ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://www.causeries-numeriques.fr/feed/rss2/comments/38</wfw:commentRss>
      </item>
    
  <item>
    <title>Le lien du développeur</title>
    <link>http://www.causeries-numeriques.fr/post/2008/09/23/Le-lien-du-developpeur</link>
    <guid isPermaLink="false">urn:md5:7537e0675b7c26072f3d19a2e76c5d44</guid>
    <pubDate>Tue, 23 Sep 2008 14:03:00 +0200</pubDate>
    <dc:creator>jb</dc:creator>
        <category>Des pingouins et des hommes</category>
        <category>css</category><category>html</category><category>java</category><category>perl</category><category>php</category><category>python</category><category>ruby</category><category>ruby on rails</category>    
    <description>    &lt;p&gt;Le site &lt;a href=&quot;http://www.gotapi.com&quot;&gt;gotAPI&lt;/a&gt; regroupe la majorité des API des langages usuels. Le site est pratique et paramétrable via des onglets pour choisir les langages qu'on utilisent. L'intérêt de la manip' c'est qu'on ne garde qu'un onglet sous Firefox, ça évite d'avoir une douzaine d'onglets d'ouverts quand on travaille sur plusieurs langages en même temps.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.causeries-numeriques.fr/post/2008/09/23/Le-lien-du-developpeur#comment-form</comments>
      <wfw:comment>http://www.causeries-numeriques.fr/post/2008/09/23/Le-lien-du-developpeur#comment-form</wfw:comment>
      <wfw:commentRss>http://www.causeries-numeriques.fr/feed/rss2/comments/37</wfw:commentRss>
      </item>
    
  <item>
    <title>Manipulation de tags mp3 avec Perl, Ruby et Python</title>
    <link>http://www.causeries-numeriques.fr/post/2007/06/13/Manipulation-de-tags-mp3-avec-Perl-Ruby-et-Python</link>
    <guid isPermaLink="false">urn:md5:2516246ceeeb3ede44e198d20a43a497</guid>
    <pubDate>Wed, 13 Jun 2007 08:49:00 +0200</pubDate>
    <dc:creator>jb</dc:creator>
        <category>Des pingouins et des hommes</category>
        <category>id3</category><category>mp3</category><category>perl</category><category>python</category><category>ruby</category>    
    <description>&lt;p&gt;Pour les petits scripts de quelques lignes, trois langages se partagent le terrain&amp;nbsp;: Perl, Python et Ruby. Le problème du jour est la modification de &lt;em&gt;tags&lt;/em&gt; ID3 ainsi que le renomage de fichiers.&lt;/p&gt;    &lt;h3&gt;Présentation du problème&lt;/h3&gt;

&lt;p&gt;Je podcast l'émission &lt;a href=&quot;http://www.rtl.fr/radio/emission.asp?dicid=504270&quot;&gt;Le grand juron&lt;/a&gt; en utilisant iPodder. Le problème est que les fichiers reçus sont stockés avec un nom du style&amp;nbsp;: &lt;code&gt;podcasting_temp_0000541_541680.mp3?podName=LEGDJURON&lt;/code&gt; et ils n'ont pas d'extension &lt;code&gt;.mp3&lt;/code&gt;.
Le nom n'est pas vraiment explicite pour retrouver une émission quelconque. Généralement, pendant l'écoute, je mets le tag &lt;em&gt;title&lt;/em&gt; à la date du jour.
Le but de ces scripts est de sauvegarder le fichier sous la forme &lt;code&gt;jour mois année.mp3&lt;/code&gt; et de mettre le nom de l'émission dans le tag &lt;em&gt;artist&lt;/em&gt;.&lt;/p&gt;


&lt;h3&gt;En Perl&lt;/h3&gt;


&lt;h4&gt;Pré requis&lt;/h4&gt;


&lt;p&gt;De nombreux module permettent de traiter les fichiers mp3, j'ai retenu &lt;code&gt;MP3::Info&lt;/code&gt; présent sur le CPAN à l'adresse &lt;a href=&quot;http://search.cpan.org/~daniel/MP3-Info-1.22/lib/MP3/Info.pm&quot;&gt;mp3info&lt;/a&gt;. Pour l'installer, il y a trois ligne de commande à taper&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt; perl Makefile.PL  
 make
 sudo make install&lt;/pre&gt;


&lt;h4&gt;Le script&lt;/h4&gt;


&lt;p&gt;Il est très simple, on construit la liste des fichiers à traiter avec un &lt;code&gt;glob&lt;/code&gt; et on utilise le module pour lire et modifier les tags.&lt;/p&gt;

&lt;code class=&quot;perl&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#!/usr/bin/perl -w&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;use&lt;/span&gt; MP3::&lt;span style=&quot;color: #006600;&quot;&gt;Info&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$fichier&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/glob.html&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;glob&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'*LE*'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/print.html&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$fichier&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;my&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$mp3&lt;/span&gt; = MP3::&lt;span style=&quot;color: #006600;&quot;&gt;Info&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$fichier&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$mp3&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;artist&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'Le grand juron'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.perldoc.com/perl5.6/pod/func/rename.html&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;rename&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$fichier&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$mp3&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;title&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;.mp3&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;



&lt;h3&gt;En Ruby&lt;/h3&gt;


&lt;h4&gt;Pré requis&lt;/h4&gt;


&lt;p&gt;Un module (&lt;em&gt;gem&lt;/em&gt;) est nécessaire pour pouvoir lire et modifier les tags mp3. Pour installer le &lt;em&gt;gem&lt;/em&gt; &lt;code&gt;ruby-mp3info&lt;/code&gt;, il suffit d'utiliser la commande &lt;code&gt;sudo gem install ruby-mp3info&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;L'API est disponible sur &lt;a href=&quot;http://ruby-mp3info.rubyforge.org/&quot; hreflang=&quot;en&quot;&gt;mp3info&lt;/a&gt;&lt;/p&gt;


&lt;h4&gt;Le script&lt;/h4&gt;


&lt;p&gt;Le script n'est pas très différent de celui en Perl, rien de bien sorcier.&lt;/p&gt;

&lt;code class=&quot;ruby&quot;&gt;&lt;span style=&quot;color:#008000; font-style:italic;&quot;&gt;#!/usr/bin/ruby -w&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;rubygems&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;mp3info&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Dir.&lt;span style=&quot;color:#9900CC;&quot;&gt;glob&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;*LE*&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |fichier|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;puts&lt;/span&gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;#{fichier}&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nom = ''&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Mp3Info.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;fichier&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |infos|&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;infos.&lt;span style=&quot;color:#9900CC;&quot;&gt;tag&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;artist&lt;/span&gt; = &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Le grand juron&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nom = infos.&lt;span style=&quot;color:#9900CC;&quot;&gt;tag&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;title&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File.&lt;span style=&quot;color:#9900CC;&quot;&gt;rename&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;fichier,nom+&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;.mp3&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;


&lt;h3&gt;En Python&lt;/h3&gt;


&lt;h4&gt;Pré requis&lt;/h4&gt;


&lt;p&gt;J'ai un peu cherché pour trouver un module permettant de lire/modifier les tags. Mon choix s'est porté sur &lt;a href=&quot;http://id3-py.sourceforge.net/&quot;&gt;ID3&lt;/a&gt;. Sur le site web (un peu vieux), il est annoncé que ce module est présent dans les distributions Debian, l'est-il sur Ubuntu&amp;nbsp;? Un petit&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt; sudo aptitude install python-id3&lt;/pre&gt;

&lt;p&gt;me permet de constater que oui&amp;nbsp;!&lt;/p&gt;


&lt;h4&gt;Le script&lt;/h4&gt;


&lt;p&gt;Pas beaucoup de différences non plus...&lt;/p&gt;

&lt;code class=&quot;python&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#!/usr/bin/python&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;, &lt;span style=&quot;color: #dc143c;&quot;&gt;os&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;from&lt;/span&gt; ID3 &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; *&lt;br /&gt;
&lt;br /&gt;
fichiers = &lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;.&lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&amp;quot;*LE*&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; fichier &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; fichiers:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; fichier&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mp3 = ID3&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;fichier&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mp3&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'ARTIST'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; = &lt;span style=&quot;color: #483d8b;&quot;&gt;'Le grand juron'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mp3.&lt;span style=&quot;color: black;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #dc143c;&quot;&gt;os&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;rename&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;fichier,mp3&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'TITLE'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span style=&quot;color: #483d8b;&quot;&gt;&amp;quot;.mp3&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;


&lt;p&gt;Il n'est pas possible de simplifier les deux premières lignes en&amp;nbsp;:&lt;/p&gt;
&lt;code class=&quot;python&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; fichier &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;.&lt;span style=&quot;color: #dc143c;&quot;&gt;glob&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&amp;quot;*LE*&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;/code&gt;



&lt;h3&gt;Tests des différents scripts&lt;/h3&gt;


&lt;h4&gt;Version utilisées des différents langages&amp;nbsp;:&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Perl&amp;nbsp;: 5.8.7&lt;/li&gt;
&lt;li&gt;Ruby&amp;nbsp;: 1.8.4&lt;/li&gt;
&lt;li&gt;Python&amp;nbsp;: 2.4.3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Système Ubuntu 6.06&lt;/p&gt;


&lt;h4&gt;Temps de conversion avec l'affichage du nom du fichier&lt;/h4&gt;

&lt;p&gt;Pour comparer (un peu...) les différents script, l'utilitaire &lt;code&gt;time&lt;/code&gt; du shell a été utilisé. Les scripts ont été testés sur des paquets de 10,20 et 50 fichiers. Les résultats (approximatifs) sont dans le tableau ci-dessous&amp;nbsp;:&lt;/p&gt;
&lt;table&gt;
  &lt;tr&gt; &lt;td&gt;Langage&lt;/td&gt; &lt;td&gt;10 fichiers&lt;/td&gt; &lt;td&gt;20 fichiers&lt;/td&gt; &lt;td&gt;50 fichiers&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt; &lt;td&gt;Perl&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 1.5s&lt;/td&gt; &lt;td&gt;end. 3s&lt;/td&gt; &lt;/tr&gt;
  &lt;tr&gt; &lt;td&gt;Python&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 2s&lt;/td&gt; &lt;/tr&gt;
  &lt;tr&gt; &lt;td&gt;Ruby&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 15s&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;p&gt;Sur le lot de 50 fichiers, Ruby freine brutalement au milieu du lot de fichier et le disque dur s'affole. Le problème provient probablement de l'accès aux fichiers.&lt;/p&gt;


&lt;h4&gt;Temps de conversion sans affichage du nom du fichier&lt;/h4&gt;

&lt;table&gt;
  &lt;tr&gt; &lt;td&gt;Langage&lt;/td&gt; &lt;td&gt;10 fichiers&lt;/td&gt; &lt;td&gt;20 fichiers&lt;/td&gt; &lt;td&gt;50 fichiers&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt; &lt;td&gt;Perl&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 2s&lt;/td&gt; &lt;/tr&gt;
  &lt;tr&gt; &lt;td&gt;Python&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;/tr&gt;
  &lt;tr&gt; &lt;td&gt;Ruby&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 1s&lt;/td&gt; &lt;td&gt;env. 14s&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h4&gt;Bilan&lt;/h4&gt;


&lt;p&gt;Après plusieurs séries de tests, les temps sont dans le même ordre. Il n'y a pas de grosse différences entre les trois langages sauf sur les gros lots de fichier pour lesquels Ruby freine à mis parcours.
D'ailleurs quelqu'un sait pourquoi ?...&lt;/p&gt;</description>
    
    
    
          <comments>http://www.causeries-numeriques.fr/post/2007/06/13/Manipulation-de-tags-mp3-avec-Perl-Ruby-et-Python#comment-form</comments>
      <wfw:comment>http://www.causeries-numeriques.fr/post/2007/06/13/Manipulation-de-tags-mp3-avec-Perl-Ruby-et-Python#comment-form</wfw:comment>
      <wfw:commentRss>http://www.causeries-numeriques.fr/feed/rss2/comments/6</wfw:commentRss>
      </item>
    
</channel>
</rss>
