Programación en Ada/Unidades predefinidas/Ada.Strings.Fixed

Ada.Strings.Fixed proporciona subprogramas para la transformación y el manejo de strings de tamaño fijo.

Ejemplo

editar
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

editar

Según el manual de referencia, 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

editar