J'ai appris que vous pouvez ouvrir/fermer un fichier txt et y écrire plusieurs fois (ajouter). Bien que, chaque fois que je le fais, il commence sur une nouvelle ligne. Y at-il de toute façon que je puisse revenir exactement là où le curseur s'est arrêté? Merci!Ada: Retour arrière dans le fichier texte ajouté
0
A
Répondre
5
Utilisez les flux et l'attribut de flux 'Write
de type String
. L'attribut indique une procédure qui affichera les données nues d'un objet chaîne.
with Ada.Streams.Stream_IO;
procedure Write_Appending is
use Ada.Streams.Stream_IO;
F : File_Type;
procedure Write_Hello is
begin
String'Write (Stream (F), "Hello, ");
end Write_Hello;
procedure Write_World is
begin
String'Write (Stream (F), "World");
end Write_World;
begin
Create (F, Name => "Hello.txt");
Write_Hello;
Write_World;
Close (F);
-- forgot "!", append it at the end of the file.
Open (F, Mode => Append_File, Name => "Hello.txt");
Character'Write (Stream (F), '!');
Close (F);
end Write_Appending;
fichier résultant
$ cat Hello.txt
Hello, World!$
Notez comment la dernière ligne du fichier ne se termine pas avec une terminaison de ligne. Pour écrire à Current_Output
, considérons Ada.Text_IO.Text_Streams
(LRM A.12.2).
2
Oui. Utilisez un autre package d'E/S que Ada.Text_IO
. Une option pourrait être d'utiliser le paquet générique Ada.Direct_IO
instancié avec le type de caractère approprié.
Sweet! Maintenant, j'ai le problème inverse, comment puis-je effectuer un retour chariot au lieu d'écrire en continu sur une ligne? XD – Numnumberry
'Character'Write' le fera. CR a une position ordinale fixe (''Pos') dans le type' Character', donc l'utilisation de '' Value' avec cette position est une façon d'ajouter CR à la sortie. Un nom plus traditionnel est 'ASCII.CR' du paquet obsolète' ASCII'. – B98
J'ai pensé que trop .. mais voici mon code: écrire ("chance"); \t Ouvrir (F, Append_File, "Hello.txt"); \t Character'Write (Flux (F), ASCII.CR); \t Fermeture (F); rien ne se passe dans le fichier texte, sauf que la chance est imprimée sur une ligne quand il est exécuté plusieurs fois, je peux faire quelque chose de mal – Numnumberry