Cours complet pour apprendre à programmer en D


précédentsommairesuivant

22. Rediriger les flux d'entrée et de sortie standard

Tous les programmes que nous avons vus jusqu'à maintenant interagissaient à travers stdin et stdout, respectivement le flux d'entrée standard et le flux de sortie standard. Par défaut, les fonctions d'entrée et de sortie comme readf et writeln opèrent sur ces flux.

Lors de l'utilisation de ces flux, nous avons supposé que l'entrée standard venait du clavier et que la sortie standard allait vers l'écran.

Nous commencerons à écrire des programmes qui géreront des fichiers dans le chapitre suivant. Nous verrons que comme les flux d'entrée et de sortie, les fichiers sont des flux de caractères également ; ils sont donc utilisés pratiquement de la même manière que stdin et stdout.

Avant de voir comment on accède aux fichiers depuis les programmes, je voudrais vous montrer comment les entrées et sorties standard des programmes peuvent être redirigées vers des fichiers ou vers d'autres programmes. Les programmes peuvent enregistrer dans des fichiers au lieu d'afficher à l'écran, et lire depuis des fichiers à la place du clavier. Même si ces fonctionnalités ne concernent pas directement les langages de programmation, ce sont des outils utiles qui sont disponibles dans toutes les consoles modernes.

22-1. Rediriger la sortie standard vers un fichier avec >

Quand on lance un programme depuis la console, écrire un caractère > et un nom de fichier à la fin de la ligne de commande redirige la sortie standard de ce programme vers le fichier spécifié. Tout ce que le programme envoie vers la sortie standard sera écrit dans ce fichier plutôt que sur l'écran.

Testons ceci avec un programme qui lit un nombre flottant depuis son entrée, le multiplie par 2 et l'affiche dans sa sortie standard :

 
Sélectionnez
import std.stdio;
 
void main()
{
   double nombre;
   readf(" %s", &nombre);
 
   writeln(nombre * 2);
}

Si le nom du programme est par_deux, sa sortie sera écrite vers un fichier nommé par_deux_resultat.txt si on exécute la ligne suivante :

 
Sélectionnez
./par_deux > par_deux_resultat.txt

Par exemple, si on entre 1.2 dans la console, le résultat 2.4 apparaîtra dans par_deux_resultat.txt. Note : même si le programme n'affiche pas une ligne du style « Veuillez entrer un nombre », il s'attend quand même à ce qu'un nombre soit entré.

22-2. Rediriger l'entrée standard depuis un fichier avec <

De manière similaire, l'entrée standard peut être redirigée depuis un fichier par <. Dans ce cas, le programme lit depuis le fichier spécifié à la place du clavier.

Pour tester cela, utilisons un programme qui calcule le dixième d'un nombre :

 
Sélectionnez
import std.stdio;
 
void main()
{
   double nombre;
   readf(" %s", &nombre);
 
   writeln(nombre / 10);
}

En supposant que le fichier par_deux_resultat.txt existe toujours et contient 2.4, et que le nom du nouveau programme est un_dixieme, on peut rediriger l'entrée du nouveau programme de cette manière :

 
Sélectionnez
./un_dixieme < par_deux_resultat.txt

Cette fois, le programme lira depuis par_deux_resultat.txt et affichera le résultat 0.24 à la console.

22-3. Rediriger les deux flux standard

> et < peuvent être utilisés en même temps :

 
Sélectionnez
./un_dixieme < par_deux_resultat.txt > un_dixieme_resultat.txt

Cette fois, l'entrée standard serait lue depuis par_deux_resultat.txt et la sortie standard serait écrite vers un_dixieme_resultat.txt.

22-4. Combiner les programmes avec |

Notez que par_deux_resultat.txt est un intermédiaire entre les deux programmes ; par_deux écrit dedans et un_dixieme lit depuis ce fichier.

Le caractère | « achemine » (pipe) la sortie standard du programme qui est sur sa gauche vers l'entrée standard du programme qui est sur la droite sans nécessiter un fichier intermédiaire. Par exemple, quand les deux programmes ci-dessus sont « combinés » ensemble comme dans la ligne qui suit, ils calculent ensemble un cinquième du nombre en entrée :

 
Sélectionnez
./par_deux | ./un_dixieme

par_deux est lancé et lit un nombre depuis l'entrée. Le résultat de par_deux apparaît ensuite dans l'entrée standard de un_dixieme, qui à son tour calcule et affiche un dixième de ce résultat.

22-5. Exercice

Combinez plus de deux programmes :

 
Sélectionnez
./un | ./deux | ./trois

La solutionRediriger l'entrée standard et les flux de sortie - Correction.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+