<?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 - uniligne</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>
    
</channel>
</rss>
