La gestion de fichiers en Perl




  1. Principe Général

En Perl, la gestion de fichier est sur le même principe que pour les autres langages impératif (Pascal, Java...).


  2. Fonctions utiles

Voici les fonctions utiles pour la gestion de fichiers en Perl :
Nom Fonctionnalité Exemple
OpenOuverture d'un fichierOpen (MONFICH, "fich.txt");
CloseFermerture d'un fichierClose (MONFICH);
= <NOM_FICHIER>Lecture de lignes$line = <MOMFICH>;
PrintEcriture de lignesPrint (MONFICH, "ma ligne a écrire\r\n";
if -fTest de l'existence du fichier ou du repertoireif (-f "monfichier")
statInformation sur le fichierstat ("nomfichier");
renameRenomme le fichierrename "monfichier", "nouveaunom";
unlinkEfface le fichierunlink "monfichier";


  3. Exemples de lecture de fichier



  3. 1. Lecture d'une ligne

Voici un exemple de lecture du fichier test.txt qui se trouve dans le répertoire courant :
open (RESU, "test.txt");
$whole_line = <RESU>
print "$whole_line";
close (RESU);
Cet exemple affiche la première ligne du fichier.
  • La commande "Open" permet d'ouvrir le fichier. "RESU" est la variable qui permettra par la suite d'accéder au fichier. Ensuite, on précise le nom du fichier à ouvrir, dans notre cas : test.txt.
  • La commande suivante permet de copier le contenu de la ligne du fichier dans la variable "$whole_line". L'accès au fichier se fait donc grâce à la commande <NOMFICH> qui contient la valeur de la ligne courante.
  • La commande "Print" affiche à l'écran la valeur de la variable "$whle_line"
  • Enfin, la commande "Close" ferme le fichier. La fermeture d'un fichier signifie simplement qu'il n'est plus en accès, et que par conséquent, un autre programme peut y avoir accès.



  3. 2. Lecture de tout un fichier



  3.2.1. Utilisation d'une boucle

Voici le même code légèrement modifier afin d'afficher tout le fichier :
open (RESU, "test.txt");
while ($whole_line = <RESU>) {
    print "$whole_line";
}
close (RESU);
En effet, la boucle "While" permet de lire chaque ligne, jusqu'à la fin du fichier. la commande de lecture de ligne du fichier place automatiquement le "curseur" sur la ligne d'après. C'est-à-dire que si vous faites la commande "$whole_line = <RESU>" deux fois de suite, vous récupérerez deux lignes différentes ! Si <RESU> est considérée comme une variable normale, dès qu'elle est lue, cette variable prend la valeur de la ligne suivante.


  3.2.2. Sans utilisation d'une boucle

open (RESU, "test.txt");
@Fichier = <RESU>;
close (RESU);

Ceci permet de lire tout le fichier et de le mettre dans le tableau "@Fichier". La gestion des tableaux en Perl n'est pas encore présente sur le site, mais j'espère bien le rajouter un jour.



  3. 3. Lecture du fichier avec test

En effet, si vous essayer d'afficher un fichier qui n'existe pas, ce n'est pas top. Voici donc comment tester si le fichier existe ou non :
if (-f "test.txt") {
    open (RESU, "test.txt");
    while ($whole_line = <RESU>) {
        print "$whole_line";
    }
    close (RESU);
}
Vous remarquez que le code est très très compliqué !
En fait, la structure conditionnelle "if" regorge de petites astuces pour faciliter la vie. Ainsi, le "if (-f ...)" permet de tester très facilement l'existence d'un fichier.
Pour plus d'informations sur le "if", patienter un peu, j'y travaille...



  4. Exemples d'écriture de fichier



  4. 1. Exemple d'écriture dans un fichier

Voici un exemple d'écriture dans le fichier test.txt qui se trouve dans le répertoire courant :
open (NEWFICH, ">test.txt");
print NEWFICH "ligne 1\r\n";
$test = "ligne 2\r\n";
print NEWFICH $test;
close (NEWFICH);
Ce code comporte bien sur des similitudes avec le code de lecture, mais attention au ">" comme vous allez le voir :
  • La commande "Open" ouvre le fichier. Par contre, on remarque la présence du ">". Ce ">" permet de dire que le fichier doit être ouvert en écriture. Son absence indique donc que le fichier est ouvert en lecture ! Ce mode d'ouverture crée le fichier s'il n'existe pas, et l'écrase s'il existe. Pour ajouter à la suite, utiliser le ">>" (exemple plus loin)
  • La commande "Print" permet d'écrire dans le fichier. Comme vous le constatez, le fonctionnement est le même que pour l'affichage à l'écran, c'est à dire que vous pouvez écrire directement une chaîne de caractère, ou une variable.
  • Enfin, la commande "Close" qui sert toujours à terminer l'accès au fichier.



  4. 2. Exemple d'écriture dans un fichier

Pour ajouter du texte dans un fichier :
open (NEWFICH, ">>test.txt");
print NEWFICH "ligne 1\r\n";
$test = "ligne 2\r\n";
print NEWFICH $test;
close (NEWFICH);
La différence par rapport au code précédent réside dans le ">>" au lieu de ">". Cette différence permet d'ajouter du texte à la fin du fichier au lieu de l'écraser s'il existe déjà.


  4. 3. Exemple d'écriture directe dans un fichier

Voici un complément qui vous permet de voir comment saisir une ligne au clavier et qu'elle soit mise dans le fichier voulu :
open (NEWFICH, ">test.txt");
print "Entrez la ligne à ajouter dans le fichier :\n";
$ligne_a_ecrire = <STDIN>;
print NEWFICH $ligne_a_ecrire."\r\n";
close (NEWFICH);

Ce code permet de faire saisir une ligne à l'utilisateur pour qu'elle soit ajouter dans le fichier.


  5. Recherche de Fichier

Pour recherche des fichiers dans un répertoire (afin de renommer, ouvrir, effacer...), voici un exemple de code permettant de rechercher les fichiers d'un répertoire :
#!/usr/bin/perl

opendir(daemon,"/home/hobbesworld");
while ($supprfich = readdir(daemon)) {
  print $supprfich."\n";
}
closedir(daemon);



  6. Résultat de la fonction 'stat'

La fonction stat permet d'obtenir de nombreuses informations sur un fichier (taille, droits...). Mais, encore faut-il savoir l'utiliser. Ceci ne va donc pas être réellement une explication de l'utilisation de stats, mais plus précisement quel genre de résultats la fonction peut renvoyer.
Voici donc un exemple de l'utilisation de stat :
($dev,$inode,$perm,$liens,$uid,$gid,$ndev,$lg,$acces,$mod,$cr,$blksize,$bl)=stat("test.txt");
print "dev = $dev\n";
print "inode = $inode\n";
print "perm = $perm\n";
print "liens = $liens\n";
print "uid = $uid\n";
print "gid = $gid\n";
print "ndev = $ndev\n";
print "lg = $lg\n";
print "acces = $acces\n";
print "mod = $mod\n";
print "cr = $cr\n";
print "blksize = $blksize\n";
print "bl = $bl\n";
Voici le retour d'un tel programme :
sous windows :
dev = 5
inode = 0
perm = 33206
liens = 1
uid = 0
gid = 0
ndev = 5
lg = 23
acces = 1035758351
mod = 1035733079
cr = 1035733069
blksize =
bl =
sous Unix :
dev = 772
inode = 1723075
perm = 33261
liens = 1
uid = 961
gid = 179
ndev = 999
lg = 615
acces = 1035759164
mod = 1035759151
cr = 1035759151
blksize = 4096
bl = 2





Page modifiée le : 02/05/2004
Site modifié le : 14/09/2020


Valid XHTML 1.0 Transitional