Ruby est l’un des langages les plus utilisés sur le Web. Nous avons récemment commencé une nouvelle session ici sur Nettuts + qui vous présentera Ruby, ainsi que les formidables cadres et outils associés au développement de Ruby. Aujourd'hui, nous allons regarder le Dir
et Fichier
classes, et comment nous pouvons les utiliser pour travailler avec des répertoires et des fichiers.
я
Si vous avez beaucoup travaillé avec le terminal (ligne de commande AKA, shell AKA), vous saurez qu'il a la notion d'un répertoire en cours, appelé répertoire de travail. C’est le dossier dans lequel vous vous trouvez. Chaque fois que vous tapez une commande utilisant un fichier, le répertoire de travail sera le premier endroit où votre shell cherchera le fichier..
Ruby a une notion similaire lors de l'exécution du code. Il comprend la structure de dossiers du système d'exploitation et dispose d'outils utiles pour le travailler..
Alors, comment trouvez-vous le dossier dans lequel le script Ruby pense se trouver??
Dir.pwd # "/ Users / andrew / Documents"
le pwd
(imprimer répertoire de travail) méthode sur le Dir
classe nous donne cette information. Si tu es dans irb
, votre répertoire de travail sera par défaut le dossier que vous avez ouvert irb
Si vous êtes dans un script, ce sera l'emplacement d'où vous appelez le script.
Si vous voulez changer le répertoire de travail, vous pouvez utiliser le chdir
méthode; transmettez-lui le chemin du répertoire dans lequel vous voulez vous déplacer:
Dir.chdir "Documents" Dir.chdir "/ users / andrew / Documents"
Comme vous pouvez le constater, le paramètre de chaîne peut être un chemin absolu ou relatif..
Si vous recherchez certains fichiers dans le répertoire de travail (Dir.pwd
), vous pouvez les obtenir en utilisant le Dir.glob
méthode. Passez cette méthode a? Glob ?; c'est un modèle de recherche qui se situe quelque part entre une chaîne statique et une expression régulière complète. Vous pouvez utiliser un astérisque *
comme un joker, comme vous le feriez dans la coque; vous pouvez utiliser un double astérisque **
faire correspondre les répertoires de manière récursive. Vous pouvez également utiliser des ensembles entre crochets comme vous le feriez avec des expressions régulières. Si vous avez besoin de plus, consultez la documentation complète. Dir.glob
avec le retour d'un tableau? ou, vous pouvez passer un bloc et obtenir chaque match un par le.
# Rappelez-vous, ceci fonctionne sur le répertoire en cours all_text_files = Dir.glob "* .txt" Dir.glob ("** / *. [A-z]") do | nomfichier | # fera correspondre tout fichier de n'importe quel répertoire enfant avec une seule extension de lettre minuscule
Outre le logement de fonctions utiles, vous pouvez également créer une instance du Dir
classe. Vous lui transmettez le nom du répertoire que vous souhaitez utiliser; comme avec toutes les fonctions qui prennent un chemin, cela peut être absolu ou relatif.
reciepts = Dir.new "reciepts" me = Dir.open "/ users / andrew"
Tous les deux Nouveau
et ouvrir
retourner un Dir
objet; Cependant, il y a une autre façon d'utiliser ouvrir
:
Dir.Open "/ utilisateurs / Andrew" do | dir | # l'utiliser ici fin
Ceci est une convention commune avec de nombreuses classes en ruby; au lieu de stocker le Dir
objet dans une variable, vous pouvez le transmettre à un bloc et l'utiliser à partir de là. C'est un style de codage assez différent de celui que je n'ai pas vu dans une autre langue, mais c'est plutôt sympa que de s'y habituer.
Il y a de fortes chances que lorsque vous créez un Dir
objet, vous aurez envie de travailler avec le contenu de celui-ci. Il y a plusieurs façons de le faire.
En supposant some_dir
est Dir
objet,
some_dir.each do | fichier | # faire quelque chose fin
Vous pouvez utiliser le chaque
méthode sur Dir
les objets à parcourir sur chaque fichier ou répertoire qui se trouve à l'intérieur. Notez que vous ne recevez pas un Fichier
ou Dir
objet; juste une chaîne avec le nom de celui-ci; si vous voulez faire plus, vous devrez instancier vous-même l'objet approprié.
Si vous voulez juste voir le contenu d’un répertoire, vous pouvez utiliser le les entrées
propriété, pour obtenir un tableau du contenu:
some_dir.entries # [".", "?", "file_one.txt", "un autre répertoire"]
Comme vous le remarquerez plus haut, l'entrée d'un répertoire comprend?.? et ?? ?, le pointeur lui-même et son répertoire parent.
Ruby offre également une API utile pour travailler avec des fichiers..
Lorsque vous travaillez avec des fichiers, vous voudrez peut-être en obtenir le chemin absolu. le Fichier
La classe offre exactement ce dont vous avez besoin:
File.absotule_path "plans.txt" # => "/users/andrew/Documents/plans.txt"
Mais qu'en est-il de l'inverse? Vous avez le chemin absolu et vous voulez juste le nom du fichier? Au lieu de cela, utilisez nom de base
Nom du fichier ("/ users / andrew / Documents / plans.txt") # => "plans.txt" Nom du fichier ("/ users / andrew / Documents / plans.txt", ".txt") # => "des plans"
Si vous passez un deuxième paramètre de chaîne, la méthode recherchera cette chaîne à la fin du nom du fichier et la supprimera si elle se trouve à cet endroit. cela ne doit pas nécessairement être l'extension de fichier, mais c'est l'utilisation principale évidente de cette.
L’utilisation évidente de ceci est de supprimer le fichier que vous passez dans la méthode:
Fichier.delete "code.rb"
C’est utile; dis que tu es chaque
-sur les entrées d’un Dir
objet, mais vous ne voulez traiter que des fichiers. le Fichier.directory?
la méthode retournera vrai
si le paramètre de chaîne que vous lui transmettez est un répertoire, et faux
si c'est un fichier.
Dir.open (Dir.pwd) .each do | filename | next si File.directory? nomfichier # sinon, fin du fichier de processus
Cet extrait ouvrir
s le répertoire courant et passe un bloc au chaque
méthode. le chaque
La méthode passe les entrées du répertoire une à une au bloc. Cette première ligne à l'intérieur du bloc peut vous déranger un peu si vous n'êtes pas habitué à Ruby, mais regardez-la attentivement. La seule partie que vous ne connaissez pas est la suivant
mot-clé, qui saute le reste du bloc et passe à l'itération suivante. Donc, nous disons: «passez à l'entrée suivante si l'entrée que nous avons actuellement est un répertoire. Si ce n'est pas un répertoire, nous pouvons faire ce que nous voulons.
Faire des exemples de la Fichier
la classe fonctionne exactement comme avec Dir
; File.new
renvoie un Fichier
objet, tandis que Fichier.Ouvert
peut le retourner ou le transmettre à un bloc. Vous devez également passer un deuxième paramètre, qui décide de la manière dont le fichier sera ouvert. La plupart du temps, vous utiliserez probablement ceci:
Alors, quelles méthodes fait une instance de Fichier
te donner? Eh bien, ces méthodes viennent en réalité de la IO
classe à partir de laquelle Fichier
hérite. La plupart du temps, vous ouvrez un fichier pour en lire ou en écrire le contenu, regardons donc cette fonctionnalité..
Avant de commencer, souvenez-vous de ceci: le fonctionnement d'un fichier, une fois la ligne lue, ne s'affiche plus; vous travaillez à travers le fichier. À tout moment, vous pouvez utiliser le f.rewind
méthode pour revenir au début du fichier.
Si vous voulez juste lire le tout, vous pouvez le faire avec lis
.
f = File.open ("sample.txt", "r") # assume ce fichier pour les prochains extraits f.read # => "quelque chose \ nline 2 \ na tiers \ nfour! \ \ n5555 \ nsixy \ nsevenly \ la nuit "
Cependant, vous voudrez probablement lire une ligne à la fois; pour ce faire, utilisez la méthode readline
:
f.rewind # au début f.readline # "quelque chose \ n" f.readline # "ligne 2 \ n" f.readline # "un tiers \ n"
Vous pouvez aussi utiliser la méthode obtient
au lieu de readline
.
Il y a aussi un lignes de lecture
méthode, qui retourne un tableau dans lequel les lignes sont des entrées:
f.rewind f.readlines # => ["quelque chose \ n", "ligne 2 \ n", "un troisième \ n", "quatre! \ n", "5555 \ n", "sixans \ n", " septièmement \ n "," huit "]
Enfin, vous pouvez utiliser chaque
, et passez un bloc à la méthode pour travailler avec chaque ligne, une par une
f.rewind f.each do | line | met fin de ligne
Pour écrire, vous avez deux options: écrire
et met
. La principale différence est que met
ajoute un saut de ligne à la fin de votre chaîne, tandis que écrire
ne fait pas.
f = fichier.open ("fichier.txt", "w +") f.puts "première ligne" f.write "deuxième" f.write "ligne" f.rewind f.readlines # => ["première ligne \ n ", "deuxième ligne"]
Eh bien, c’est tout pour Ruby For Newbies, Leçon 7. Il y a plus à découvrir dans la Dir
et Fichier
Des classes; consultez les documents pour Dir, File et IO pour plus (la classe IO est celle d'où File hérite ses méthodes d'instance).
Cependant, je suis curieux de savoir où vous voulez que cette série aille maintenant: voulez-vous continuer avec le langage Ruby ou voulez-vous évoluer vers l'utilisation de Ruby sur le Web? Les deux sens vous seront utiles en tant que développeur Web, alors exprimez votre opinion dans les commentaires.!