Perl utilise une variable appelée type de descripteur de fichier pour manipuler les fichiers.
La lecture ou l’écriture de données à partir d’un fichier nécessite un descripteur de fichier.
Un descripteur de fichier est le nom d’une connexion E/S.
Perl fournit trois descripteurs de fichiers : STDIN, STDOUT et STDERR, qui représentent respectivement l'entrée standard, la sortie standard et la sortie d'erreur standard.
Vous pouvez ouvrir des fichiers en Perl en utilisant les méthodes suivantes :
ouvrir FILEHANDLE, EXPRopen FILEHANDLEsysopen FILEHANDLE, FILENAME, MODE, PERMSsysopen FILEHANDLE, FILENAME, MODE
Description du paramètre :
FILEHANDLE : descripteur de fichier, utilisé pour stocker un identifiant de fichier unique.
EXPR : une expression composée du nom de fichier et du type d'accès au fichier.
MODE : type d'accès au fichier.
PERMS : bits d'autorisation d'accès (bits d'autorisation).
Dans le code suivant, nous utilisons la fonction open pour ouvrir le fichier file.txt en mode lecture seule (<) :
open(DONNÉES, "<fichier.txt");
< indique le mode lecture seule.
DATA dans le code est le handle de fichier utilisé pour lire le fichier. L'exemple suivant ouvrira le fichier et affichera le contenu du fichier :
Le code suivant ouvre le fichier file.txt en écriture ( > ) :
open(DATA, ">file.txt") ou die "le fichier file.txt ne peut pas être ouvert, $!";
> Indique la méthode d'écriture.
Si vous devez ouvrir le fichier en lecture et en écriture, vous pouvez ajouter un signe + avant le caractère > ou < :
open(DATA, "+<file.txt"); ou die "le fichier file.txt ne peut pas être ouvert, $!";
Cette méthode ne supprimera pas le contenu original du fichier. Si vous souhaitez le supprimer, le format est le suivant :
ouvrez DATA, "+>file.txt" ou die "le fichier file.txt ne peut pas être ouvert, $!";
Si vous souhaitez ajouter des données à un fichier, il vous suffit d'ouvrir le fichier en mode ajout avant d'ajouter les données :
open(DATA,">>file.txt") || die "le fichier file.txt ne peut pas être ouvert, $!";
>> signifie ajouter des données à la fin du fichier existant. Si vous avez besoin de lire le contenu du fichier à ajouter, vous pouvez ajouter le signe + :
open(DATA,"+>>file.txt") || die "Le fichier file.txt ne peut pas être ouvert, $!";
Le tableau suivant répertorie les différents modes d'accès :
modèle | décrire |
---|---|
< ou r | Ouvrez en mode lecture seule et pointez le pointeur du fichier vers l'en-tête du fichier. |
> ou w | Ouvrez en mode écriture, pointez le pointeur de fichier sur l'en-tête du fichier et tronquez la taille du fichier à zéro. Si le fichier n'existe pas, essayez de le créer. |
>> ou un | Ouvrez en mode écriture et pointez le pointeur de fichier vers la fin du fichier. Si le fichier n'existe pas, essayez de le créer. |
+< ou r+ | Ouvrez en mode lecture-écriture et pointez le pointeur de fichier vers l'en-tête du fichier. |
+> ou w+ | Ouvrez en mode lecture-écriture, pointez le pointeur de fichier sur l'en-tête du fichier et tronquez la taille du fichier à zéro. Si le fichier n'existe pas, essayez de le créer. |
+>> ou un+ | Ouvrez en mode lecture-écriture et pointez le pointeur de fichier vers la fin du fichier. Si le fichier n'existe pas, essayez de le créer. |
La fonction sysopen est similaire à la fonction open, sauf que leurs formes de paramètres sont différentes.
L'exemple suivant ouvre un fichier en lecture et en écriture (+<filename) :
sysopen(DONNÉES, "fichier.txt", O_RDWR);
Si vous devez effacer le fichier avant de le mettre à jour, la méthode d'écriture est la suivante :
sysopen(DONNÉES, "fichier.txt", O_RDWR|O_TRUNC );
Vous pouvez utiliser O_CREAT pour créer un nouveau fichier, O_WRONLY est en mode écriture seule, O_RDONLY est en mode lecture seule.
Le paramètre PERMS est une valeur d'attribut octal, indiquant les autorisations après la création du fichier. La valeur par défaut est 0x666 .
Le tableau suivant répertorie les valeurs de mode possibles :
modèle | décrire |
---|---|
O_RDWR | Ouvrez en mode lecture-écriture et pointez le pointeur de fichier vers l'en-tête du fichier. |
O_RDONLY | Ouvrez en mode lecture seule et pointez le pointeur du fichier vers l'en-tête du fichier. |
O_WRONLY | Ouvrez en mode écriture, pointez le pointeur de fichier sur l'en-tête du fichier et tronquez la taille du fichier à zéro. Si le fichier n'existe pas, essayez de le créer. |
O_CREAT | Créer un fichier |
O_APPEND | ajouter un fichier |
O_TRUNC | Tronquer la taille du fichier à zéro |
O_EXCL | Si le fichier existe lors de l'utilisation de O_CREAT, un message d'erreur sera renvoyé. Il peut tester si le fichier existe. |
O_NONBLOC | Les E/S non bloquantes permettent à notre opération de réussir ou de renvoyer une erreur immédiatement sans être bloquée. |
Une fois le fichier utilisé, le fichier doit être fermé pour actualiser les tampons d'entrée et de sortie associés au descripteur de fichier. La syntaxe de fermeture du fichier est la suivante :
fermerFILEHANDLEfermer
FILEHANDLE est le descripteur de fichier spécifié et renvoie true s'il est fermé avec succès.
close(DATA) || die "Impossible de fermer le fichier" ;
Il existe plusieurs manières différentes de lire et d'écrire des informations dans des fichiers :
La principale méthode de lecture des informations à partir d’un descripteur de fichier ouvert est l’opérateur <FILEHANDLE>. Dans un contexte scalaire, il renvoie une seule ligne du descripteur de fichier. Par exemple:
Lorsque nous utilisons l'opérateur <FILEHANDLE>, il renverra une liste de chaque ligne du descripteur de fichier, par exemple nous pouvons importer toutes les lignes dans un tableau.
Implémentez la création du fichier import.txt avec le contenu suivant :
$ chat import.txt 123
Lisez import.txt et placez chaque ligne dans le tableau @lines :
En exécutant le programme ci-dessus, le résultat de sortie est :
123
La fonction xgetc renvoie un seul caractère du FILEHANDLE spécifié, ou STDIN s'il n'est pas spécifié :
getcFILEHANDLEgetc
Si une erreur se produit ou si le descripteur de fichier se trouve à la fin du fichier, undef est renvoyé.
La fonction read est utilisée pour lire les informations à partir du descripteur de fichier du tampon.
Cette fonction est utilisée pour lire des données binaires à partir d'un fichier.
lire FILEHANDLE, SCALAIRE, LONGUEUR, OFFSETlire FILEHANDLE, SCALAIRE, LONGUEUR
Description du paramètre :
FILEHANDLE : descripteur de fichier, utilisé pour stocker un identifiant de fichier unique.
SCALAIRE : stocke le résultat. Si OFFSET n'est pas spécifié, les données seront placées au début de SCALAR. Sinon, les données sont placées après l'octet OFFSET dans SCALAIRE.
LENGTH : La longueur du contenu lu.
DÉCALAGE : décalage.
Renvoie le nombre d'octets lus si la lecture réussit, 0 si la fin du fichier est atteinte et undef si une erreur se produit.
Pour toutes les fonctions qui lisent les informations à partir des descripteurs de fichiers, la fonction d'écriture principale dans le backend est print :
imprimer LISTE DES HANDLES DE FICHIERimprimer LISTEimprimer
Les résultats de l'exécution du programme peuvent être envoyés au périphérique de sortie (STDOUT : sortie standard) à l'aide du handle de fichier et de la fonction d'impression, par exemple :
imprimer "Bonjour tout le monde !n" ;
Dans l'exemple suivant, nous allons ouvrir un fichier file1.txt existant, en lire chaque ligne et l'écrire dans le fichier file2.txt :
Dans l'exemple suivant, nous renommeons le fichier existant file1.txt en file2.txt et le répertoire spécifié se trouve sous /usr/codercto/test/ :
#!/usr/bin/perlrename ("/usr/codercto/test/file1.txt", "/usr/codercto/test/file2.txt" );
La fonction renomme n'accepte que deux paramètres et ne renomme que les fichiers existants.
L'exemple suivant montre comment utiliser la fonction de dissociation pour supprimer des fichiers :
Vous pouvez obtenir l'emplacement d'un fichier à l'aide de la fonction tell et spécifier l'emplacement dans le fichier à l'aide de la fonction de recherche :
La fonction tell est utilisée pour obtenir l'emplacement du fichier :
dire à FILEHANDLetell
Si FILEHANDLE est spécifié, cette fonction renvoie la position du pointeur de fichier, en octets. S’il n’est pas spécifié, renvoie le descripteur de fichier sélectionné par défaut.
La fonction seek() lit ou écrit des fichiers en déplaçant le pointeur de lecture-écriture du fichier via le handle de fichier, et lit et écrit en octets :
chercher FILEHANDLE, POSITION, OÙ
Description du paramètre :
FILEHANDLE : descripteur de fichier, utilisé pour stocker un identifiant de fichier unique.
POSITION : indique le nombre d'octets à déplacer par le descripteur de fichier (pointeur de position de lecture et d'écriture).
WHENCE : indique la position de départ lorsque le descripteur de fichier (pointeur de position de lecture-écriture) commence à se déplacer. Les valeurs possibles sont 0, 1 et 2, indiquant le début du fichier, la position actuelle et la fin du fichier. fichier respectivement.
L'exemple suivant lit 256 octets depuis le début du fichier :
rechercher DATA, 256, 0 ;
Les opérations sur les fichiers de Perl peuvent également d'abord tester si le fichier existe, s'il peut être lu et écrit, etc.
On peut d'abord créer le fichier file1.txt, comme suit :
$ cat file1.txt www.codercto.com
En exécutant le programme ci-dessus, le résultat de sortie est :
Informations file1.txt : est un fichier texte de 15 octets
Les opérateurs de test de fichier sont présentés dans le tableau suivant :
Opérateur | décrire |
---|---|
-UN | L'heure à laquelle le fichier a été consulté pour la dernière fois (unité : jours) |
-B | Est-ce un fichier binaire ? |
-C | Heure de modification du nœud d'index du fichier (inode) (unité : jours) |
-M | L'heure à laquelle le fichier a été modifié pour la dernière fois (unité : jours) |
-O | Le fichier appartient au véritable UID |
-R | Les fichiers ou répertoires peuvent être lus par un véritable UID/GID |
-S | Pour prise (prise) |
-T | Est-ce un fichier texte ? |
-W | Les fichiers ou répertoires peuvent être écrits avec un véritable UID/GID |
-X | Les fichiers ou répertoires peuvent être exécutés avec un véritable UID/GID |
-b | Pour les fichiers de bloc spécial (bloc spécial) (tels que les disques montés) |
-c | Pour les fichiers de caractères spéciaux (caractères spéciaux) (tels que les périphériques d'E/S) |
-d | pour répertoire |
-e | Le nom du fichier ou du répertoire existe |
-f | pour les fichiers ordinaires |
-g | Le fichier ou le répertoire a l'attribut setgid |
-k | Le fichier ou le répertoire a le sticky bit défini |
-l | pour les liens symboliques |
-o | Le fichier appartient à un UID valide |
-p | Le fichier est un tube nommé (FIFO) |
-r | Le fichier peut être lu avec un UID/GID valide |
-s | Le fichier ou le répertoire existe et n'est pas 0 (renvoie le nombre d'octets) |
-t | Le descripteur de fichier est TTY (résultat renvoyé par la fonction système isatty(); ce test ne peut pas être utilisé pour les noms de fichiers) |
-u | Le fichier ou le répertoire a l'attribut setuid |
-w | Les fichiers peuvent être écrits avec un UID/GID valide |
-x | Le fichier peut être exécuté avec un UID/GID valide |
-z | Le fichier existe et la taille est 0 (le répertoire est toujours faux), c'est-à-dire s'il s'agit d'un fichier vide. |