Re: Ada.Text_IO

Jean-Pierre Rosen via Ada-france <[email protected]> Wed, 29 Sep 2021 19:48:07 +0200
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Le 29/09/2021 à 17:53, Thomas De Contes via Ada-france a écrit :
> Bonjour :-)
> 
> 
> 1)
> Standard_Error
> 
> Si j'ai bien compris,
> Put("texte");
> est un raccourci pour
> Put(Current_Output, "texte");
> 
> Par contre, il n'y a pas de raccourci equivalent pour Current_Error ?
non.

> Y a-t-il des "bonnes pratiques", quand on veut écrire sur Standard_Error ?
> Vaut-il mieux préférer Standard_Error ou Current_Error ?
Standard_Error si tu veux être sûr d'écrire sur la sortie d'erreur en 
toute circonstances, Current_Error si tu veux pouvoir d'éventuelles 
redirections par Set_Error

> Y a-t-il une différence entre les 2 si Set_Error n'est utilisé nulle part dans l'application ?
Non

> Et si on écrit sur Standard_Error dans une bibliothèque, faut il prévoir que l'usager de la bibliothèque puisse vouloir utiliser Set_Error ?
A priori, si l'utilisateur fait un Set_Error, c'est qu'il veut rediriger 
la sortie (par exemple dans un fichier). Je ne vois pas pourquoi on 
voudrait l'en empêcher...

> 2)
> Close
> 
> File_Type n'est pas un type contrôlé, donc quand c'est une variable locale il n'est pas finalisé au moment de sa disparition,
> donc si on veut que ça soit fermé proprement, Close est obligatoire (notamment en cas d'exceptions).
> Est-ce que ça a été conçu comme ça exprès ?
Ca a été conçu avant l'existence des types contrôlés, donc si on a un 
fichier local F, on devrait toujours avoir à la fin:
exception
    when others =>
       if Is_open (F) then
          Close (F);
       end if;

> 3)
> Create(Name => "")
> 
> J'avais déjà lu quelque part ce que ça fait, mais je ne parviens pas à retrouver où.
Ca crée un fichier temporaire (effacé automatiquement au Close)
>
> Est-ce que, en combinaison avec Name ("function  Name   (File : in File_Type) return String;") ça permet d'obtenir un répertoire pour fichiers temporaires,
> pour nous permettre de créer des fichiers temporaires qui durent un petit peu plus (qu'on puisse fermer et rouvrir avec l'application) mais pas trop quand même (qui soient effacés par le système régulièrement) ?
Non, le fichier disparaît au Close, et il n'y a pas nécessairement de 
répertoire associé (i.e. dans les systèmes bien faits, on a la notion de 
fichier temporaire - c'est parcequ'on n'a pas cette notion dans le 
système qu'Unix/DOS utilise /tmp ou équivalent).

Mais Reset permet de relire le fichier SANS le fermer.

> 4)
> (Pendant que j'y suis, pour un peu plus tard : )
> Fins de ligne portables
> 
> Dans mon code, j'ai :
> 
>     Ada.Text_IO.Get_Line (Input_File, Line, Last);
>     if Line (Last) = ASCII.CR then
>        Last := Last - 1;  -- ignore DOS line end
>     end if;
> 
> Je suppose que sur chaque plateforme, les fins de ligne sont bien gérées chacunes de leur coté,
> et que ce code est là seulement pour le cas où on transfère des fichiers entre Windows et Linux.
A priori, oui. La fin de ligne, si c'est un ou plusieurs caractères, 
n'est jamais retournée. Cela n'arrive qu'en cas de fichier "mal formé". 
Ceci dit, il me semble (à vérifier) que Gnat admet indiféremment CR, 
CR/LF, LF/CR, LF comme Termine-Ligne.

> C'est du très vieux code : est-il toujours utile ?
Je pense que non, à vérifier

> Si oui, ce morceau est là pour le cas où on lit sous Linux un fichier Windows.
> Mais pour le cas inverse (où on lit sous Windows un fichier Linux), y a-t-il des précautions à prendre ?
> Est-ce que tout le fichier se retrouve sur une seule ligne, avec des ASCII.LF non-interprétés ?
> 
Cf. ci-dessus, à essayer...
-- 
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52
https://www.adalog.fr
_______________________________________________
Ada-france mailing list
[email protected]
https://mail.ada-france.org/cgi-bin/mailman/listinfo/ada-france