Règles du forum

Le langage Ada uniquement, pas les compilateurs. Les questions de sémantique et de langage et les questions techniques liées à une application en particulier, son deux choses différentes. Si nécessaire, un forum sur GNAT et les autres compilateurs, tel JanusAda, sera ouvert.

fel-right backspace enter delete begin end dans un fichier.
que pensez vous du titre ?

Le sondage s’est terminé le Sam 31 Déc 2016 21:18

peut-être 0% 0% 0
incertain 0% 0% 0
oui 0% 0% 0
faux 0% 0% 0
Nombre total de votes : 0
Auteur Message
Beau Parleur
Avatar de l’utilisateur
Bonjour,
J'aime travailler avec Ada onc je poste dans la section dédiée à mon plus grand bonheur.

Je viens chercher des idée pour effectuer 7 taches excluent les unes des autres,

c'est 7 taches sont liées à la lecture et la modification de fichier.
Voici la liste reduite à leur ensemble d'appartenance dans l'abstraction que j'ai du modèle.

Fonction "aller à la fin de la ligne courante ".
Fonction "aller au début de la ligne courante"
fonction "suppresion du caractère suivant".
fonction "aller au caractère suivant".
fonction "aller au caractère précédent".
fonction "inserer ou substituer une nouvelle ligne".
fonction "supprimer le caractère précédent.

j'ai réfléchis un peu et j'ai trouver deux choses.

La première est le duel "être en fin de ligne" et "être en début de ligne.
La deuxieme est le duel "être en début de ficher et être en fin de fichier.

Après j'ai eu une idée. c'est que maintenir l'état des position précédente et position suivante de la position courante.


Voilà, vous avez mon début de solution. je me déplace déjé de ligne en ligne de page en page. j'insert une nouvelle ligne avant le début de la ligne courante, j'insers ou substitu un caractère à la position courante.

Mais je sais le faire je vais le faire même mais entre temps si vous avez une bonne idée, je suis preneur.

Les sources son dispo à sourceforge ou à http://88.189.147.62/gnaies.html, le programme s'appel gnaies.


Pour vous donner une idée de mon implémentation, voici le code de l'affichage d'un page.

Source Ada : 

declare
Count : Natural := 0;
Term_Width : Natural := Edit_Buffer.C-2;
begin
if Edit_Buffer.File_Result /= null and then Edit_Buffer.File_Result.File_Content /= null then

Print_Loop:
for I in File_Index+1..Positive'min(File_Index+((Result_Max_Lines-2)),
Edit_Buffer.File_Result.File_Content'Length) loop
declare
tmp : constant Wide_String :=
(-Edit_Buffer.File_Result.File_Content(I));
Line : constant Wide_String := Tmp(Tmp'First..Wide_Fixed.Index_Non_Blank((Tmp), Backward));

Chars_Max : constant Positive := Term_Width;
Lines_Max : constant Positive := (Result_Max_Lines-2);
begin

if Real_Length(Line) > 0 and Real_Length(Line) < (Chars_Max * Lines_Max) then
for Line_Window in Line_Index..Integer'min(Real_Length(Line)/Chars_Max, Lines_Max) loop

declare
B_Inf : constant Positive := Line_Window * Chars_Max + 1;
B_Sup : constant Positive := Integer'min((Line_Window + 1)*Chars_Max, Real_Length(Line));
begin

if Real_length(Line) < Chars_max then
Draw(Edit_Buffer.Edit_Window.all, Count+1, 1, White, Line);

else
Draw(Edit_Buffer.Edit_Window.all, Count+1, 1, White, Line(B_Inf..B_Sup));

end if;
end;
Count := Count + 1;
exit Print_Loop When Count > (Result_Max_Lines - 3);
end loop;
else
Count := Count + 1;
end if;
end;


exit Print_Loop when Count > (Result_Max_Lines - 3);

end loop Print_Loop;

end if;

end;





Evidemment j'utilise ANSI_Console. Merci, et bravo pour l'implémentation de cette bibliothèque.

Merci pour votre contribution.

Je retourne au taf quand même.


Et plutôt que de revenir, j'ai un problème pour le calcule des tabulation mais j'ai des idées, mais c'est lourd.
Dans cette affichage j'ai un problème pour les tabulations.
Profil
Beau Parleur
Avatar de l’utilisateur
Y a un bug à l'affichage du code Ada à cause des cissions.
Profil
Beau Parleur
Avatar de l’utilisateur
Désolé.
Profil
Beau Parleur
Avatar de l’utilisateur
Je reviens parce que c'est réglé pour mon problème d'optimisation.

J'ai trouvé que selon le mode insertion ou overwrite et selon qu'on backspace, ou delete ou enter on fait 5 chose différente dont 3 sont combiné à une 4ieme et une 5ieme distincte.

d'abord on beep si on tente entrer enter ou delete en mode roverwrite.

ensuite en insertion on concatenne et on bouge avec backspace si non on remplace par une espace et on bouge ; avec Enter c'est une sission et on bouge si non on beep; et avec delete on concatenne si non on beep.

C'étais pour faire le point. Merci de votre patience et gentillesse.

Bonsoir.
Profil