Mes listings d'étudiants me sont fournis au format suivant

...
DUPONT,PAUL
DURAND,PIERRE
...

La présentation "tout en majuscules" ne me plaît pas beaucoup ; 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 uniligne qui fait tout d'un coup.

Pour obtenir un comportement uniligne en ruby, on utilise plusieurs options sur la ligne de commande (l'option -e est obligatoire). Les principales options sont les suivantes :

  • -e 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).
  • -n Ruby place les instructions dans une boucle (while gets ... end) en utilisant le fichier (dont le nom et placé en argument sur la ligne de commande) comme source.
  • -p est identique à -n avec en plus un affichage de $_ (la ligne lue) à la fin de la boucle.

L'uniligne obtenue est le suivant :

ruby -ne 'puts $_.split(",").each{|n| n.capitalize!}.join(",") ' TD.csv > TDmaj.csv

La ligne lue (dans le fichier TD.csv) est découpée en utilisant split puis une boucle each permet de traiter chaque élément avec capitalize! pour passer que la première lettre en majuscule. Le contenu du tableau (issue du each) et transformé en une chaîne en utilisant join avec la virgule comme caractère de jointure. Une redirection finale (> TDmaj.csv) envoie tout ça dans un nouveau fichier.