Ruby Entrées/Sorties de fichiers
Ruby fournit un ensemble complet de méthodes liées aux E/S, implémentées dans le module Kernel. Toutes les méthodes d'E/S dérivent de la classe IO.
ClasseIOFournit toutes les méthodes de base, telles queread, write, gets, puts, readline, getcetprintf。
Ce chapitre expliquera toutes les fonctions d'E/S de base disponibles dans Ruby. Pour plus de fonctions, veuillez vous référer à la classeIOde Ruby.
putsInstruction
Dans les chapitres précédents, vous avez attribué des valeurs à des variables, puis utilisé l'instructionputspour afficher la sortie.
putsL'instruction demande au programme d'afficher la valeur stockée dans la variable. Cela ajoute un saut de ligne à la fin de chaque ligne.
Exemple
La sortie de l'exemple ci-dessus est :
This is variable one This is variable two
getsInstruction
getsL'instruction peut être utilisée pour obtenir l'entrée utilisateur depuis l'entrée standard nommée STDIN.
Exemple
Le code suivant montre comment utiliser l'instruction gets. Ce code invite l'utilisateur à saisir une valeur, la valeur sera stockée dans la variable val, et enfin affichée sur STDOUT.
Exemple
La sortie de l'exemple ci-dessus est :
Enter a value : This is entered value This is entered value
putcInstruction
andputsContrairement à l'instruction,putsl'instruction affiche la chaîne entière à l'écran, tandis queputcl'instruction peut être utilisée pour afficher un caractère à la fois.
Exemple
La sortie du code suivant est uniquement le caractère H :
Exemple
La sortie de l'exemple ci-dessus est :
H
printInstruction
printL'instruction est similaire à l'instructionputs. La seule différence est queputsl'instruction passe à la ligne suivante après avoir affiché le contenu, tandis qu'en utilisant l'instructionprintinstruction, le curseur est positionné sur la même ligne.
Exemple
La sortie de l'exemple ci-dessus est :
Hello WorldGood Morning
Ouverture et fermeture de fichiers
Jusqu'à présent, vous avez lu et écrit sur l'entrée et la sortie standard. Maintenant, nous allons voir comment manipuler de vrais fichiers de données.
File.newMéthode
Vous pouvez utiliser la méthodeFile.newpour créer un objetFileen lecture, en écriture ou les deux, selon le paramètre mode. Enfin, vous pouvez utiliser la méthodeFile.closepour fermer le fichier.
Syntaxe
File.openMéthode
Vous pouvez utiliser la méthodeFile.openpour créer un nouvel objet fichier et affecter cet objet fichier à un fichier. Cependant,File.openetFile.newIl y a une légère différence entre les méthodes. La différence est que la méthodeFile.openpeut être associée à un bloc, tandis queFile.newne le peut pas.
Le tableau suivant répertorie les différents modes d'ouverture de fichiers :
| Mode | Description |
|---|---|
| r | Mode lecture seule. Le pointeur de fichier est placé au début du fichier. Il s'agit du mode par défaut. |
| r+ | Mode lecture-écriture. Le pointeur de fichier est placé au début du fichier. |
| w | Mode écriture seule. Si le fichier existe, il écrase le fichier. Si le fichier n'existe pas, un nouveau fichier est créé pour l'écriture. |
| w+ | Mode lecture-écriture. Si le fichier existe, il écrase le fichier existant. Si le fichier n'existe pas, un nouveau fichier est créé pour la lecture et l'écriture. |
| a | Mode écriture seule. Si le fichier existe, le pointeur de fichier est placé à la fin du fichier. C'est-à-dire que le fichier est en mode ajout. Si le fichier n'existe pas, un nouveau fichier est créé pour l'écriture. |
| a+ | Mode lecture-écriture. Si le fichier existe, le pointeur de fichier est placé à la fin du fichier. C'est-à-dire que le fichier est en mode ajout. Si le fichier n'existe pas, un nouveau fichier est créé pour la lecture et l'écriture. |
Lecture et écriture de fichiers
Les méthodes utilisées pour les E/S simples peuvent également être utilisées avec tous les objets fichier. Ainsi, gets lit une ligne depuis l'entrée standard,aFile.getset lit une ligne depuis l'objet fichier aFile.
Cependant, les objets d'E/S fournissent des paramètres supplémentaires pour les méthodes d'accès, ce qui nous facilite la tâche.
sysreadMethod
Vous pouvez utiliser la méthodesysreadpour lire le contenu d'un fichier. Lorsque vous utilisez la méthode sysread, vous pouvez ouvrir le fichier dans n'importe quel mode. Par exemple :
Le fichier texte d'entrée est le suivant :
This is a simple text file for testing purpose.
Maintenant, essayons de lire ce fichier :
Exemple
Cette instruction lit les 20 premiers caractères du fichier d'entrée. Le pointeur de fichier sera placé à la position du 21e caractère dans le fichier.
syswriteMéthode
Vous pouvez utiliser la méthodesyswritepour écrire du contenu dans un fichier. Lorsque vous utilisez la méthode syswrite, vous devez ouvrir le fichier en mode écriture. Par exemple :
Exemple
Cette instruction écrira "ABCDEF" dans le fichier.
each_byteMéthode
Cette méthode appartient à la classeFile. La méthodeeach_byteest un itérateur qui parcourt chaque caractère d'une chaîne. Regardez l'exemple de code suivant :
Exemple
Les caractères sont transmis un par un à la variable ch, puis affichés à l'écran, comme indiqué ci-dessous :
A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e...
IO.readlinesMethod
La classeFileest une sous-classe de la classe IO. La classe IO possède également quelques méthodes pour manipuler des fichiers.
IO.readlinesest une méthode de la classe IO. Cette méthode renvoie le contenu du fichier ligne par ligne. Le code suivant montre l'utilisation de la méthodeIO.readlines:
Exemple
Dans ce code, la variable arr est un tableau. Le fichierinput.txtcontient chaque ligne comme élément du tableau arr. Par conséquent, arr
IO.foreachMethod
Cette méthode renvoie également la sortie ligne par ligne. La méthodeforeachet la méthodereadlinesdiffèrent en ce que la méthodeforeachest associée à un bloc. Cependant, contrairement à la méthodereadlines, la méthodeforeachne renvoie pas de tableau. Par exemple :
Exemple
Ce code transmettra le contenu du fichiertestligne par ligne à la variable block, puis la sortie sera affichée à l'écran.
Renommer et supprimer des fichiers
Vous pouvez utiliser les méthodesrenameetdeletepour renommer et supprimer des fichiers.
L'exemple suivant renomme un fichier existanttest1.txt:
Exemple
L'exemple suivant supprime un fichier existanttest2.txt:
Exemple
Modes et propriété des fichiers
Utilisation de la méthodechmodavec un masque pour changer le mode ou la liste des permissions/d'accès d'un fichier :
L'exemple suivant change le mode d'un fichier existanttest.txten une valeur de masque :
Exemple
Le tableau suivant liste leschmoddifférents masques qui peuvent être utilisés dans la méthode :
| Masque | Description |
|---|---|
| 0700 | masque rwx pour le propriétaire |
| 0400 | r, pour le propriétaire |
| 0200 | w, pour le propriétaire |
| 0100 | x, pour le propriétaire |
| 0070 | masque rwx pour le groupe |
| 0040 | r, pour le groupe |
| 0020 | w, pour le groupe |
| 0010 | x, pour le groupe |
| 0007 | masque rwx pour les autres |
| 0004 | r, pour les autres |
| 0002 | w, pour les autres |
| 0001 | x, pour les autres |
| 4000 | Définir l'ID utilisateur lors de l'exécution |
| 2000 | Définir l'ID de groupe lors de l'exécution |
| 1000 | Sauvegarder le texte échangé, même après utilisation |
Requêtes de fichiers
La commande suivante vérifie si le fichier existe avant d'ouvrir le fichier :
Exemple
La commande suivante vérifie si le fichier est bien un fichier :
Exemple
La commande suivante vérifie si le nom de fichier donné est un répertoire :
Exemple
La commande suivante vérifie si le fichier est lisible, modifiable et exécutable :
Exemple
La commande suivante vérifie si la taille du fichier est nulle :
Exemple
La commande suivante renvoie la taille du fichier :
Exemple
La commande suivante est utilisée pour vérifier le type du fichier :
Exemple
La méthode ftype identifie le type du fichier en renvoyant l'une des valeurs suivantes :file, directory, characterSpecial, blockSpecial, fifo, link, socket, ou unknown。
La commande suivante est utilisée pour vérifier l'heure de création, de modification ou de dernier accès du fichier :
Exemple
Répertoires en Ruby
Tous les fichiers sont contenus dans des répertoires, et Ruby fournit des moyens de gérer les fichiers et les répertoires.FileLa classe File est utilisée pour gérer les fichiers,Diret la classe Dir est utilisée pour gérer les répertoires.
Parcourir les répertoires
Pour changer de répertoire dans un programme Ruby, utilisezDir.chdir. L'exemple suivant remplace le répertoire courant par/usr/bin。
Vous pouvez utiliser Dir.pwdpour afficher le répertoire courant :
Vous pouvez utiliserDir.entriespour obtenir la liste des fichiers et des répertoires dans le répertoire spécifié :
Dir.entriesRenvoie un tableau contenant tous les éléments du répertoire spécifié.Dir.foreachFournit la même fonctionnalité :
Une façon plus concise d'obtenir une liste du contenu d'un répertoire consiste à utiliser les méthodes de type tableau de Dir :
Création de répertoires
Dir.mkdirPeut être utilisé pour créer des répertoires :
Vous pouvez également définir des autorisations sur un nouveau répertoire (pas un répertoire existant) via mkdir :
Remarque :Le masque 755 définit les autorisations pour le propriétaire, le groupe et tout le monde (n'importe qui) à rwxr-xr-x, où r = lecture, w = écriture, x = exécution.
Suppression de répertoires
Dir.deletePeut être utilisé pour supprimer un répertoire.Dir.unlinketDir.rmdirEffectuent la même fonction, ce qui nous facilite la tâche.
Création de fichiers et de répertoires temporaires
Les fichiers temporaires sont des informations qui sont simplement créées pendant l'exécution du programme mais qui ne sont pas stockées de façon permanente.
Dir.tmpdirfournit le chemin du répertoire temporaire sur le système actuel, mais cette méthode n'est pas disponible par défaut. Pour rendreDir.tmpdirdisponible, il est nécessaire d'utiliser require 'tmpdir'.
Vous pouvez utiliserDir.tmpdiretFile.joinensemble pour créer un fichier temporaire indépendant de la plateforme :
Ce code crée un fichier temporaire, y écrit des données, puis supprime le fichier. La bibliothèque standard de Ruby inclut également une bibliothèque nomméeTempfilebibliothèque, qui peut être utilisée pour créer des fichiers temporaires :
Fonctions natives
Ce qui suit fournit une liste complète des fonctions intégrées pour la gestion des fichiers et des répertoires dans Ruby :
Autres extensions