Blady
2019-11-11 17:26:01 UTC
Bonjour,
Je cherchais une procédure remplaçant un caractère par un autre dans une
chaine Unbounded_String. Je n'ai trouvé que pour un seul caractère de la
chaine :
procedure Replace_Element (Source : in out Unbounded_String;
Index : in Positive;
By : in Character);
Bon pour toute la chaine il suffit d'itérer...
Ah je met la main sur la procédure qui pourrait faire l'affaire :
procedure Translate (Source : in out Unbounded_String;
Mapping : in Maps.Character_Mapping_Function);
avec par exemple la fonction :
function Arobase_En_Espace (From : Character) return Character is
begin
if From = ' ' then
return '@';
else
return From;
end if;
end Arobase_En_Espace;
j'écris :
Translate (CH1, Arobase_En_Espace'Access);
Ok mais j'aimerais paramétrer le caractère à remplacer et celui de
remplacement :
procedure Translate
(Source : in out Unbounded_String;
De, Vers : Character)
is
function De_En_Vers (From : Character) return Character is
begin
if From = De then
return Vers;
else
return From;
end if;
end De_En_Vers;
begin
Translate (Source, De_En_Vers'Access);
end Translate;
Patatras :
essaitranslate.adb:23:26: subprogram must not be deeper than access type
Est-il possible de s'en sortir sans aller jusqu'à créer un paquetage
générique ou utiliser l'attribut Unrestricted_Access ?
Merci pour vos réponses, Pascal.
http://blady.pagesperso-orange.fr
Je cherchais une procédure remplaçant un caractère par un autre dans une
chaine Unbounded_String. Je n'ai trouvé que pour un seul caractère de la
chaine :
procedure Replace_Element (Source : in out Unbounded_String;
Index : in Positive;
By : in Character);
Bon pour toute la chaine il suffit d'itérer...
Ah je met la main sur la procédure qui pourrait faire l'affaire :
procedure Translate (Source : in out Unbounded_String;
Mapping : in Maps.Character_Mapping_Function);
avec par exemple la fonction :
function Arobase_En_Espace (From : Character) return Character is
begin
if From = ' ' then
return '@';
else
return From;
end if;
end Arobase_En_Espace;
j'écris :
Translate (CH1, Arobase_En_Espace'Access);
Ok mais j'aimerais paramétrer le caractère à remplacer et celui de
remplacement :
procedure Translate
(Source : in out Unbounded_String;
De, Vers : Character)
is
function De_En_Vers (From : Character) return Character is
begin
if From = De then
return Vers;
else
return From;
end if;
end De_En_Vers;
begin
Translate (Source, De_En_Vers'Access);
end Translate;
Patatras :
essaitranslate.adb:23:26: subprogram must not be deeper than access type
Est-il possible de s'en sortir sans aller jusqu'à créer un paquetage
générique ou utiliser l'attribut Unrestricted_Access ?
Merci pour vos réponses, Pascal.
http://blady.pagesperso-orange.fr