Dans les interpréteurs de commande par exemple, les accents sont mal interprétés. Pour une meilleure lisibilité, il est alors intéressant d'avoir un fichier sans accent.
Le langage ruby intègre les expressions régulières. Celles-ci ont pour objectif de filtrer des données (chaînes de caractères). Elles s'apparentent à un Rechercher/Remplacer. Ce sont des fonctionnalités très puissantes mais à la syntaxe parfois ésotérique.
Dans notre programme qui enlève les accents, nous allons simplement utiliser la méthode gsub qui effectue les remplacements.
Voici le programme :
#Utilisateur doit taper un nom de fichier
#Tant que ce n'est pas un fichier, on réitère la demande
nomtape=""
while (!File.file?(nomtape))
puts "Entrer le chemin vers un nom du fichier"
nomtape=gets.chomp
$nomfichier=nomtape
end
#Si l'utilisateur le souhaite, le fichier est d'abord copié avant d'être modifié
#Si vous utilisez Unix, changer la ligne de commande `copy #{$nomfichier} #{$nomfichier}.save` en `cp #{$nomfichier} #{$nomfichier}.save`
rep=""
while(rep!="O" && rep!="N")
puts "Voulez-vous sauvegarder le fichier avant de le modifier (O/N)?"
rep=gets.chomp
end
if(rep=="O")
`copy #{$nomfichier} #{$nomfichier}.save`
puts "Creation de #{$nomfichier}.save"
end
#On affiche le contenu du fichier ligne par ligne avec le numéro de la ligne :
mon_fichier = File.open($nomfichier, "r")
i = 0
fichier=[]
mon_fichier.each_line { |ligne|
fichier[i]=ligne
i += 1
}
mon_fichier.close
#Utilisation d'un table associative (hash). C'est une collection d'éléments accessibles au moyen d'une clé. 'á', 'à' et 'â' sont ici des clés qui permettent d'accéder à 'a'
#gsub : effectue les remplacements
accents = { ['á','à','â','ä','ã'] => 'a',
['Ã','Ä','Â','À','Á'] => 'A',
['é','è','ê','ë'] => 'e',
['Ë','É','È','Ê'] => 'E',
['í','ì','î','ï'] => 'i',
['Í','Î','Ì','Ï']=> 'I',
['ó','ò','ô','ö','õ'] => 'o',
['Ó','Õ','Ö','Ô','Ò'] => 'O',
['œ'] => 'oe',
['Œ'] => 'OE',
['ß'] => 'ss',
['æ']=> 'ae',
['Æ']=> 'Æ',
['ú','ù','u','ü'] => 'u',
['Ü','Û','Ù','Ú'] => 'U',
['ç'] => 'c',
['Ç']=> 'C'
}
accents.each do |ac,rep|
ac.each { |s|
j=0
fichier.each { |elem|
fichier[j]=fichier[j].gsub(s, rep) #remplace s par rep, le cas échéant
j += 1
}
}
end
fichiermodif = File.open($nomfichier, "w")
fichier.each { |element|
fichiermodif.puts element
}
fichiermodif.close
puts "Modification de #{$nomfichier}"
source : http://www.ruby-forum.com/topic/144612#640711

Aucun commentaire:
Enregistrer un commentaire