Ejemplo
package∞ Fechas
is∞
type∞ Fecha
is∞
record∞
Dia : Positive
range∞ 1 .. 31;
Mes : Positive
range∞ 1 .. 12;
Año : Positive
range∞ 1 .. 3000;
end∞ record∞;
subtype∞ String_Fecha
is∞ String (1..10);
-- Pasa la fecha a string en formato "dd-mm-aaaa".
--
function∞ Imagen (F: Fecha)
return∞ String_Fecha;
end∞ Fechas;
with∞ Ada∞.
Strings∞.
Fixed;
use∞ Ada∞.
Strings∞.
Fixed;
use∞ Ada∞.
Strings∞;
package∞ body∞ Fechas
is∞
function∞ Imagen (F: Fecha)
return∞ String_fecha
is∞
procedure∞ Mover_Imagen_Positive (N: Positive; S:
in∞ out∞ String)
is∞
begin∞
-- Move copia un string en otro de otro tamaño, añadiendo un
-- padding opcionalmente. Trim elimina los blancos a izquierda o
-- derecha (en este caso el blanco que pone el 'Image).
Move
(Source => Trim (Positive'Image (N), Left),
Target => S,
Justify => Right,
Pad => '0');
end∞ Mover_Imagen_Positive;
S_Fecha : String_Fecha;
begin∞
Mover_Imagen_Positive (F.Dia, S_Fecha (1..2));
S_Fecha (3) := '-';
Mover_Imagen_Positive (F.Mes, S_Fecha (4..5));
S_Fecha (6) := '-';
Mover_Imagen_Positive (F.Año, S_Fecha (7..10));
return∞ S_Fecha;
end∞ Imagen;
end∞ Fechas;
Especificación
Según el
manual de referencia de Ada∞, la especificación de este paquete ha de ser la siguiente:
with∞ Ada∞.
Strings∞.
Maps∞;
package∞ Ada∞.
Strings∞.
Fixed is∞
pragma∞ Preelaborate(Fixed);
-- "Copy" procedure for strings of possibly different lengths
procedure∞ Move (Source :
in∞ String;
Target :
out∞ String;
Drop :
in∞ Truncation := Error;
Justify :
in∞ Alignment := Left;
Pad :
in∞ Character := Space);
-- Search subprograms
function∞ Index (Source :
in∞ String;
Pattern :
in∞ String;
Going :
in∞ Direction := Forward;
Mapping :
in∞ Maps.Character_Mapping
:= Maps.Identity)
return∞ Natural;
function∞ Index (Source :
in∞ String;
Pattern :
in∞ String;
Going :
in∞ Direction := Forward;
Mapping :
in∞ Maps.Character_Mapping_Function)
return∞ Natural;
function∞ Index (Source :
in∞ String;
Set :
in∞ Maps.Character_Set;
Test :
in∞ Membership := Inside;
Going :
in∞ Direction := Forward)
return∞ Natural;
function∞ Index_Non_Blank (Source :
in∞ String;
Going :
in∞ Direction := Forward)
return∞ Natural;
function∞ Count (Source :
in∞ String;
Pattern :
in∞ String;
Mapping :
in∞ Maps.Character_Mapping
:= Maps.Identity)
return∞ Natural;
function∞ Count (Source :
in∞ String;
Pattern :
in∞ String;
Mapping :
in∞ Maps.Character_Mapping_Function)
return∞ Natural;
function∞ Count (Source :
in∞ String;
Set :
in∞ Maps.Character_Set)
return∞ Natural;
procedure∞ Find_Token (Source :
in∞ String;
Set :
in∞ Maps.Character_Set;
Test :
in∞ Membership;
First :
out∞ Positive;
Last :
out∞ Natural);
-- String translation subprograms
function∞ Translate (Source :
in∞ String;
Mapping :
in∞ Maps.Character_Mapping)
return∞ String;
procedure∞ Translate (Source :
in∞ out∞ String;
Mapping :
in∞ Maps.Character_Mapping);
function∞ Translate (Source :
in∞ String;
Mapping :
in∞ Maps.Character_Mapping_Function)
return∞ String;
procedure∞ Translate (Source :
in∞ out∞ String;
Mapping :
in∞ Maps.Character_Mapping_Function);
-- String transformation subprograms
function∞ Replace_Slice (Source :
in∞ String;
Low :
in∞ Positive;
High :
in∞ Natural;
By :
in∞ String)
return∞ String;
procedure∞ Replace_Slice (Source :
in∞ out∞ String;
Low :
in∞ Positive;
High :
in∞ Natural;
By :
in∞ String;
Drop :
in∞ Truncation := Error;
Justify :
in∞ Alignment := Left;
Pad :
in∞ Character := Space);
function∞ Insert (Source :
in∞ String;
Before :
in∞ Positive;
New_Item :
in∞ String)
return∞ String;
procedure∞ Insert (Source :
in∞ out∞ String;
Before :
in∞ Positive;
New_Item :
in∞ String;
Drop :
in∞ Truncation := Error);
function∞ Overwrite (Source :
in∞ String;
Position :
in∞ Positive;
New_Item :
in∞ String)
return∞ String;
procedure∞ Overwrite (Source :
in∞ out∞ String;
Position :
in∞ Positive;
New_Item :
in∞ String;
Drop :
in∞ Truncation := Right);
function∞ Delete (Source :
in∞ String;
From :
in∞ Positive;
Through :
in∞ Natural)
return∞ String;
procedure∞ Delete (Source :
in∞ out∞ String;
From :
in∞ Positive;
Through :
in∞ Natural;
Justify :
in∞ Alignment := Left;
Pad :
in∞ Character := Space);
-- String selector subprograms
function∞ Trim (Source :
in∞ String;
Side :
in∞ Trim_End)
return∞ String;
procedure∞ Trim (Source :
in∞ out∞ String;
Side :
in∞ Trim_End;
Justify :
in∞ Alignment := Left;
Pad :
in∞ Character := Space);
function∞ Trim (Source :
in∞ String;
Left :
in∞ Maps.Character_Set;
Right :
in∞ Maps.Character_Set)
return∞ String;
procedure∞ Trim (Source :
in∞ out∞ String;
Left :
in∞ Maps.Character_Set;
Right :
in∞ Maps.Character_Set;
Justify :
in∞ Alignment := Strings.Left;
Pad :
in∞ Character := Space);
function∞ Head (Source :
in∞ String;
Count :
in∞ Natural;
Pad :
in∞ Character := Space)
return∞ String;
procedure∞ Head (Source :
in∞ out∞ String;
Count :
in∞ Natural;
Justify :
in∞ Alignment := Left;
Pad :
in∞ Character := Space);
function∞ Tail (Source :
in∞ String;
Count :
in∞ Natural;
Pad :
in∞ Character := Space)
return∞ String;
procedure∞ Tail (Source :
in∞ out∞ String;
Count :
in∞ Natural;
Justify :
in∞ Alignment := Left;
Pad :
in∞ Character := Space);
-- String constructor functions
function∞ "*" (Left :
in∞ Natural;
Right :
in∞ Character)
return∞ String;
function∞ "*" (Left :
in∞ Natural;
Right :
in∞ String)
return∞ String;
end∞ Ada∞.
Strings∞.
Fixed;
Manual de refencia de Ada