jeudi 5 juin 2008

Ruby et la gestion de fichiers (suite)

Nous allons maintenant créer un programme qui permet d'ajouter un copyright à tous les fichiers dans un répertoire donné. Bien entendu, ce rajout du copyright n'est valable que pour les fichiers texte, cela ne va rien donner pour les autres fichiers dont sont inclus les fichiers de traitement de texte (.doc, .xls, .odt ...). Pour ces derniers, le texte va être rajouté mais ne va pas apparaître lorsqu'on va ouvrir le fichier avec l'application

On crée d'abord un nouveau programme qui permet de créer un tableau contenant la liste des fichiers d'un répertoire donné. L'utilisateur doit spécifié en argument le répertoire ainsi que son nom, qui va servir pour le copyright (Copyright Dupond)

Le dièse (#) permet d'écrire un commentaire dans le code

Test du premier argument donné (ou non) qui correspond au nom de la personne
if(ARGV[0])
$nompers = ARGV[0] #variable globale
else
puts "Quel est votre nom ?"
$nomperso=gets.strip
end


Test du deuxième argument donné (ou non) -> dossier que l'on veut examiner
if (ARGV[1])
if (File.directory?(ARGV[1])) #est-ce un répertoire ?
$nomrep = ARGV[1]+"/"
else
puts "Le deuxieme argument specifie doit etre un repertoire !"
exit #sortie du programme
end
else
rep=""
while (rep!="O" && rep!="N")
puts "Vous n'avez pas specifie de repertoire, voulez-vous (O/N) que le repertoire soit le repertoire courant ?"
rep=STDIN.gets.strip #on a lancé le programme avec un argument, il est donc nécessaire d'utiliser STDIN.gets à la place de gets
end
if(rep=="O")
$nomrep='./'
else
exit
end
end


Met dans un tableau les fichiers du répertoire
class String
def liste_rep(tablo)
liste_exclus = [".", ".."]
d=Dir.open(self)
liste_dir = d.sort - liste_exclus
liste_dir.each { |fichier|
case File.ftype(self+fichier)
when "file"
tablo.push(fichier)
end
}
end
end
tablo=[]
$nomrep.liste_rep(tablo)

A la fin du programme, on appelle un programme ruby qui permet de crée un copyright à la fin de chaque fichier spécifié en argument
On renvoie ce que donne l'exécution du programme
Le caractère ` se fait en appuyant sur les touches Altgr et 7 du clavier puis en tapant sur la barre d'espace
i = 0
tablo.each { |elem|
print `ruby "lienversfichierruby.rb" #{$nomrep}#{tablo[i]} #{$nompers}`
i += 1
}
Il s'agit à présent de créer le programme ruby que l'on vient d'appeler
Celui-ci ressemble beaucoup au programme crée précédemment (voir le message)
On a enlevé l'affichage du contenu du fichier et rajouter la création du copyright à la fin du fichier.
Voici ce que cela donne :
if ARGV[0]
nomfichier = ARGV[0]
else
puts "Vous n'avez pas specifie de nom de fichier ! Le programme va donc s'arreter"
exit
end

if ARGV[1]
nom = ARGV[1]
else
puts "Vous n'avez pas specifie votre nom ! Le programme va donc s'arreter"
exit
end
if !File.file?(nomfichier)
File::new(nomfichier, "w+")
puts "Le fichier #{nomfichier} n'existe pas, il a donc ete cree"
end

#Ecriture du copyright :
#Le mode 'a' permet l'ouverture du fichier en lecture et écriture et place le pointeur de fichier à la fin du fichier.
mon_tabl = ["Copyright #{nom}"]
if(!File.writable?(nomfichier))
puts "Veuillez mettre #{nomfichier} en ecriture !"
else
mon_fichier = File.open(nomfichier, "a")
mon_tabl.each { |element|
mon_fichier.write element+"\n"
puts "#{nomfichier} modifie"
}
mon_fichier.close
end


source : http://pbnaigeon.developpez.com/tutoriel/ruby/premiers-pas-avec-ruby/#LVIII

Aucun commentaire: