FTLS.org 
Francais     English
 
 
Accueil
 
 Linux
Introduction
Liens
 
 Initiation
Internet
HTML
CGI
Perl
 
 Archives
Java
Perl Tools
Scripts CGI
Scripts PHP
 
 Calculatrices
HP 48
TI 92
 
 Gratuit du Net
A Gratuit
Comparatifs
Se divertir
 
 Aide Webmasters
Trucs & Astuces
JavaScript
 
 Site
Partenaires
Contact
 
 Powered by
linux
 

Initiation


Initiation au Perl



9. Les entées - sorties

    Perl contient deux commandes essentielles au niveau des fichiers, soit l'ouverture (open) et la fermeture (close). A celles-ci s'ajoutent les opérations de test, de lecture et d'écriture.

    Comme nous l'avons vu dans les exemples précédents, par défaut Perl lit et écrit sur les entées - sorties standard. Il est bien sur possible de rediriger

    9.1 Manipulation de fichiers

        Lorsque l'on veut lire ou écrire dans un fichier, il faut le dire au programme. Pour cela il faut dans un premier temps ouvrir le fichier, lire ou écrire, puis le fermer.

        Pour lire un fichier on utilise la commande Open :

    Ouvre un fichier en lecture uniquement
        syntaxe : open ( descripteur,"<nom_fichier");

    Ouvre un fichier en lecture et en écriture
        syntaxe : open ( descripteur,"+<nom_fichier");

    Ouvre un fichier en écriture avec écrasement en cas d'existence préalable du fichier
        syntaxe : open ( descripteur,">nom_fichier");

    Ouvre un fichier en écriture pour ajout en fin de fichier
        syntaxe : open ( descripteur,">>nom_fichier");

    Ouvre un fichier en lecture et écriture avec écrasement en cas d'existence préalable du fichier
        syntaxe : open ( descripteur,"+>nom_fichier");


        Le descripteur (ou handle) permet de spécifier sur quel entrée / sortie on agit. Pour lire ou écrire le fichier on utilise les commandes suivantes :

    Ecrit dans un fichier ouvert
        syntaxe : print descripteur "ce qu'il y a à ajouter";

    Lit ligne par ligne dans un fichier
        syntaxe : $ligne = < descripteur >;

    Lit et stocke chaque ligne dans le tableau fichier
        syntaxe : @fichier = < descripteur >;
        Une fois les opérations voulues effectuées ont ferme le fichier :
    ferme un fichier
        syntaxe : close (descripteur);


        Par défaut il existe 3 les descripteurs ouvert à l'exécution du programme
    <STDIN> :    Descripteur d'entrée, Entrée standard en lecture seul.
    <STDOUT>:    Descripteur de sortie. Sortie standard en écriture seul.
    <STDERR>:    Descripteur des messages d'erreurs. Sortie d'erreurs standard en écriture seul.


        Lorsque l'on utilise la commande print STDOUT "essais\n"; est équivalent à print "essais\n" si l'on n'a pas sélectionné une autre sortie par défaut.

        La commande select(descripteur); permet de spécifier une autre sortie par défaut. La commande print "essais\n"; affectera donc le nouveau descripteur.

        La commande Open et Close renvoie en 1 ou 0 en cas de succès ou d'échec, on utilise donc cette propriété pour vérifier qu'il n'y ai pas d'erreur à l'ouverture grâce à la syntaxe suivante :
        open(FILE,"$fichier") || die "Erreur de lecture $fichier, Erreur: $!";
        # Affiche le message et sort du programme en cas d'erreur.

    Exemple :
    open(FILE,"<$nom_fichier") || die "Erreur de lecture $nom_fichier, Erreur: $!";
    @fichier = <FILE>;
    close(FILE);

    @result = sort @fichier;

    open(FILE,">$nouveau_fichier") || die "Erreur d'écriture de $nouveau_fichier, Erreur: $!";
    print FILE @result;
    close(FILE);

    9.2 Les accès au système de fichiers

        Perl offre la possibilité de réaliser un certain nombre d'opérations sur les fichiers et répertoires du disque sans passer par un shell quelconque (utilisation de la commande system ou exec).

    Efface un ou plusieurs fichiers
        syntaxe : unlink (liste des noms de fichiers);

    Renomme ou déplace un fichier
        syntaxe : rename(ancien nom du fichier, nouveau nom du fichier)

    Crée un lien symbolique (Unix seulement, ln -s)
        syntaxe : symlink(nom du fichier, nom du lien)

    Change de répertoire courant
        syntaxe : chdir(nom du répertoire)

    Crée un nouveau répertoire
        syntaxe : mkdir(nom, mode)             # mode sont les permissions (Unix) à attribuer au répertoire.

    Efface un répertoire
        syntaxe : rmdir(nom)

    9.3 Testes sur les fichiers

        Il existe un certain nombre d'opérateur de test sur les fichiers dont voici quelques uns :

    -e    Le fichier existe
    -r    Le fichier est lisible (permission r)
    -x    Le fichier est exécutable (permission x)
    -w    Le fichier est accessible en écriture (permission w)
    -d    Le répertoire existe
    -T    Le fichier est de type texte
    -B    Le fichier est binaire
    -f    Fichier texte existant et non vide
    -l    Le lien symbolique existe (Unix)
    -t    Terminal
    -s    Le fichier n'est pas de taille nulle
    -z    Le fichier est de taille nulle (! -s)
    Exemple :
    if (! -e "$NomFichier") {
        print "Le fichier n'existe pas...\n";
        exit; # Sort du programme.
    }

    9.4 Appels systèmes

        Perl permet de faire appel à une commande du système. Pour cela il existe plusieurs solutions :

    system "nom_de_la commande";

    open(descripteur, "nom_de_la commande|"); ....; close(descripteur);
        # Exécute la commande et récupère la sortie standard dans le descripteur


    Exemple :
    system "rm nomfichier"; sous UNIX
    system "del monfichier"; sous DOS

    9.5 Formatage de la sortie

      9.5.1 Utilisation de printf

          Il est possible de formater la sortie en utilisant printf format, valeurs

      Exemple:
          printf "%6s %3d %4.2f\n",$s,$d,$f;
          %6s sortie caractère sur 6 caractères
          %3d sortie d'un entier sur 3 caractères
          %4.2f sortie d'un réel sur 4 caractères dont 2 après la virgule

      9.5.2 Utilisation de write

          Mais il aussi possible prédéfinir des formats. Pour définir un format vous devez utiliser le mot clé format et le définir puis afficher vos résultats au moyen de la commande write.

          - Description d'un format :
              format nom_du_format =
              descriptif de la sortie
              .

      nom_du_format :
          2 types de nom sont possibles, pour l'entête et pour le corps de l'affichage. (NOM_TOP et NOM)
          N'oubliez pas le caractère . (point) qui termine la définition d'un format. Ce point doit être en première colonne dans votre fichier.
          Ne pas mettre de commentaires comme ici dans la définition d'un format ceux-ci seraient affichés lors de l'affichage.

      descriptif de la sortie :
          Ce descriptif comprend 2 parties essentielles :

          1. le format d'affichage
          Cette partie permet de connaître la façon dont vont être affichées les données (l'endroit, la manière, la taille ...) La taille est définie par le nombre de signes présents après le signe @ ou ^

          @>>>> indiquera que la valeur sera affichée sur 4 caractères justifiés à droite
          @<<<< même chose mais justifié à gauche
          @|||| même chose mais centré
          @###.## champ numérique avec 2 chiffres après la virgule
          @* champ multiligne, on ne s'occupe pas de la taille du champ à afficher
          ^>>> affichera un champ sur plusieurs lignes de 3 caractères lignes vides incluses
          ~ ^>>> même chose mais sans les lignes vides
          ~~ ^>>> même chose mais répétera l'affichage jusqu'à trouver une ligne vide

          2. les variables à afficher
              $variables1,$variables2, ....

          - Affichage à l'écran :
          Le nom du format sera STDOUT qui par défaut est la sortie standard.
          STDOUT_TOP sera le nom du format pour l'entête.


          - Affichage dans un fichier :
          Le nom du format sera le nom du descripteur du fichier (par exemple DESC).
          DESC_TOP sera le nom du format pour l'entête.

      - Quelques exemples :

          * On désire écrire les noms et prénoms des personnes contenus dans un tableau associatif par colonnes avec comme entête les mots Nom Prénom et ceci à l'écran.

          format STDOUT_TOP =    # Permet d'écrire la première ligne
          Nom Prénom            # La première ligne
          .

          format STDOUT =            # Permet d'écrire les données formatées
          @>>>>>>>> @>>>>>>>>    # Format d'affichage des 2 champs justifié à droite
          $nom, %tab{$nom}        # le nom sur 8 caractères et le prénom sur 10
          .

          foreach $nom (keys %tab) {
              $prenom = @tab{$nom};
              write;
          }



 
© Copyright 2000 FTLS (Tyndiuk Frédéric). All rights reserved.
Last Update 08/03/2000 - Send all comments to webmaster@ftls.org