8.0.1 Fixed strings Text IO - JulTob/Ada GitHub Wiki

Example of the standard string

with Ada.Text_IO;
procedure Example is
   text: String(1..100);
   Len: Natural;
begin

   Ada.Text_IO.Get_Line( Text, Len);
   Ada.Text_IO.Put_Line( Text(1..Len));

end Example;

Las ristras de caracteres de tamaño fijo se implementan en Ada con el tipo predefinido String, que está definido como un array no restringido de elementos de tipo Character (type String is array (Positive range <>) of Character). La Librería Ada.Strings.Fixed proporciona subprogramas para manipular ristras de caracteres de tamaño fijo. Además, por ser un array, al tipo String se le pueden aplicar las operaciones propias de estos. En particular, la concatenación de ristras de tamaño fijo se realiza utilizando el operador de concatenación de arrays, la selección de una subristra se hace mediante el mecanismo de slices de los arrays, y el cálculo de la longitud (que en este caso es una constante) mediante el atributo Length de los arrays. A los caracteres individuales de una ristra de tamaño fijo se puede acceder de la misma forma que a los elementos de un array monodimensional. Los literales de tipo ristra son ristras de tamaño fijo. La entrada y salida de ristras de tamaño fijo se realiza utilizando la librería Ada.Text_IO.

Ada.Strings.Fixed

El paquete Ada.Strings.Fixed ofrece subprogramas para manipular ristras de caracteres de tamaño fijo.

with Ada.Strings; use Ada.Strings;
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
...
S : String (1 .. 7);
...
Move ("0123456", S);                            --  S = "0123456"
Move ("012", S);                                --  S = "012    "
Move ("012", S, Pad => 'X');                    --  S = "012XXXX"
Move ("012", S, Justify => Rigth)               --  S = "    012"
Move ("012", S, Justify => Rigth, Pad => 'X')   --  S = "XXXX012"
Move ("012", S, Justify => Center, Pad => 'X')  --  S = "XX012XX"
Move ("0123", S, Justify => Center, Pad => 'X') --  S = "X0123XX"
Move ("0123456789", S, Drop => Left);           --  S = "3456789"
Move ("0123456789", S, Drop => Rigth);          --  S = "0123456"
Move ("012345XXXX", S, Drop => Rigth, Pad => X);--  S = "012345X"
Move ("0123456789", S);                         --  Length_Error
------------------------------------------------------------------
Din := 5 * 'A';   --  Din = "AAAAA"
Din := 2 * "pe";  --  Din = "pepe"

-------------------------------------
Din1, Din2 : Unbounded_String;
P   : Integer;
...

Din1 := To_Unbounded_String ("Universidad de Las Palmas de Gran Canaria");
Din2 := Translate (Din1, To_Mapping ("aeiou", "12345"));  
   --  Din2 = "Un3v2rs3d1d d2 L1s P1lm1s d2 Gr1n C1n1r31"
----------------------------------------------------------------------------
with Ada.Strings;           use Ada.Strings
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
-- En Strings.Maps se encuentra la función To_Set() 
with Ada.Strings.Maps;      use Ada.Strings.Maps;
...

Fija : String (1 .. 10);
...
Fija := "  pedro   ";
Trim (Fija, Both, pad => 'X'); --  Fija = "pedroXXXXX"
Fija := "  pedro   ";
Fija := Trim (Fija, Both);     --  Fija = "pedro     "
-----------------------------------------------------------
with Ada.Strings;           use Ada.Strings
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
...

Fija : String (1 .. 10);
...
Fija := Head ("Universidad de Las Palmas de Gran Canaria", 10);
   --  Fija = "Universida"
Fija := Head ("Casa", 10); --  Fija = "Casa      "
-----------------------------------------------------------------
with Ada.Strings;       use Ada.Strings
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
...

Fija : String (1 .. 10);
...
Fija := Tail ("Universidad de Las Palmas de Gran Canaria", 10);
   --  Fija = "an Canaria"
Fija := Tail ("Casa", 10); --  Fija = "Casa      "
-----------------------------------------------------------------
with Ada.Strings;       use Ada.Strings
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
...

Fija : String (1 .. 11);
...
Fija := "Pedro corre";
Fija := Replace_Slice (Fija, 1, 5, "Jesús");           --  Fija = "Jesús corre"
Replace_Slice (Fija, 1, 5, "Santiago", Drop => Rigth); --  Fija = "Santiago co"
----------
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);
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
...
R1, R2: Unbounded_String;
...
R1 := To_Unbounded_String("Escuela");
R2 := To_Unbounded_String("de");

R3 := R1 & " Universitaria " & R2 & " Informática";
   --  R3 = "Escuela Universitaria de Informática" 
R3 := R3 & "";
   --  R3 = "Escuela Universitaria de Informática"

Ada.Text_IO

La librería Ada.Text_IO ofrece tipos, constantes y operaciones para realizar entrada y salida de datos con ficheros de texto y con la terminal estándar.La terminal estándar se maneja a través de dos ficheros "virtuales": Standard_Input (asociado generalmente con el teclado) y Standard_Output (Asociado generalmente con la pantalla).

Se puede simular la entrada y salida de cualquiera de los tipos mencionados arriba utilizando los atributos Image y Value para realizar conversiones a/desde String y aplicar las operaciones de entrada y salida de ristras de tamaño fijo.

with Text_IO; use Text_IO;
procedure Prueba is
   S : String (1 .. Integer'Width);
   LS: Natural;
   I : Integer;
begin
...
   Put_Line (Integer'Image (I));
   Get_Line (S, LS);
   I := Integer'Value (S (1 .. LS));
...
-- procedure Get([File : in File_Type;] Item : out Character);
-- procedure Get([File : in File_Type;] Item : out String);

with Ada.Text_IO; use Ada.Text_IO;
...
S : String (1 .. 20);
C : Character;
F : File_Type;
...
Get (C);     --  Lee un carácter de la entrada estándar en la variable C
Get (F, C);  --  Lee un carácter del fichero F en la variable C

Get (S);     --  Lee 20 caracteres de la entrada estándar en la ristra S
Get (F, S);  --  Lee 20 caracteres del fichero F en la ristra S

-- procedure Get_Line ([File : in File_Type; ]Item : out String;  Last : out Natural);
-- function Get_Line[(File : in File_Type)] return String;
with Ada.Text_IO; use Ada.Text_IO;
...
S1, S2: String (1 .. 20);
L1, L2: Natural;
F     : Ada.Text_IO.File_Type;
...
Get_Line (S1, L1);     -- Leído S1 (1 .. L1)
Move(Get_Line, S2, Left);

Get_Line (F, S1, L1);  -- Leído S1 (1 .. L1)
Move (F, Get_Line, S2, Left);
-- procedure Skip_Line ([File : in File_Type; ]Spacing : in Positive_Count := 1);
with Ada.Text_IO;
...

F     : Ada.Text_IO.File_Type;
...
Skip_Line;    --  Se salta un fin de línea en la salida por omisión
Skip_Line(3); --  Se saltan 3 fin de línea en la salida por omisión

Skip_Line(F);    --  Se salta un fin de línea en el fichero F
Skip_Line(F, 3); --  Se saltan 3 fin de línea en el fichero F

-- procedure Put([File : in File_Type;] Item : in Character);
-- procedure Put([File : in File_Type;] Item : in String);
with Ada.Text_IO; use Ada.Text_IO;
...
S : String (1 .. 20);
C : Character;
F : File_Type;
...
Put (C);     --  Escribe un carácter en la salida estándar (la variable C)
Put ('C');   --  Escribe el carácter 'C' en la salida estándar
Put (F, C);  --  Escribe un carácter en el fichero F (la variable C)
Put (F, 'C');--  Escribe el carácter 'C' en  el fichero F

Put (S);         --  Escribe 20 caracteres en la salida estándar (la ristra S)
Put ("Hola");    --  Escribe la ristra Hola en la salida estándar
Put (F, S);      --  Escribe 20 caracteres en el fichero F (la ristra S)
Put (F, "Hola"); --  Escribe la ristra Hola en el fichero F

-- procedure Put_Line ([File : in File_Type; ]Item : in String);
with Ada.Text_IO; use Ada.Text_IO;
...
S: String (1 .. 20);
F     : Ada.Text_IO.File_Type;
...

Put_Line (S);         --  Escribe 20 caracteres y un salto de línea en la salida estándar (la ristra S)
Put_Line ("Hola");    --  Escribe la ristra Hola y un salto de línea en la salida estándar
Put_Line (F, S);      --  Escribe 20 caracteres y un salto de línea en el fichero F (la ristra S)
Put_Line (F, "Hola"); --  Escribe la ristra Hola y un salto de línea en el fichero F

New Line

-- procedure New_Line ([File : in File_Type; ]Spacing : in Positive_Count := 1);


with Ada.Text_IO;
...

F     : Ada.Text_IO.File_Type;
...
New_Line;    --  Se escribe un fin de línea en la salida por omisión
New_Line(3); --  Se escriben 3 fin de línea en la salida por omisión

New_Line(F);    --  Se escribe un fin de línea en el fichero F
New_Line(F, 3); --  Se escriben 3 fin de línea en el fichero F

New Page

Si la línea actual no ha finalizado, escribe un fin de línea; luego escribe un fin de página, incrementa y pone a 1 los contadores de línea y columna (primera posición de la primera línea de la nueva página). Puede lanzar la excepción Mode_Error.

-- procedure New_Page [(File : in File_Type)];

Text Types

-- Tipo para manejar ficheros de texto:

type File_Type is limited private;


-- Modos de acceso a los ficheros (In_File = entrada, Out_file = salida desde el principio, Append_File = salida añadiendo):

type File_Mode is (In_File, Out_File, Append_File);


-- Tipo de los contadores de páginas, líneas y columnas:
type Count is range 0 .. implementation-defined;
subtype Positive_Count is Count range 1 .. Count'Last;


--  Límite por omisión para las líneas y páginas (cuando no hay límite):
Unbounded : constant Count := 0;


-- Anchos de campo para mostrar/leer datos:
subtype Field is Integer range 0 .. implementation-defined;


-- Bases para expresar literales numéricos
subtype Number_Base is Integer range 2 .. 16;

-- Tipo de letra (minúscula o mayúscula):
type Type_Set is (Lower_Case, Upper_Case);

Skip Page

Salta (leyendo) todos los caracteres y marcas de fin de línea que encuentre hasta leer una marca de fin de página; actualiza el contador de página y pone a 1 los contadores de línea y columna (primera posición de la primera línea de la siguiente página). Puede lanzar las excepciones Mode_Error y End_Error

-- procedure Skip_Page [(File : in File_Type;)];

with Ada.Text_IO;
...

F     : Ada.Text_IO.File_Type;
...
Skip_Page;    --  Avanza hasta pasar el siguiente fin de página en la salida por omisión

Skip_Page (F); --  Avanza hasta pasar el siguiente fin de página en el fichero F