Array Slicing

# Array Slicing

```--
-- Array slices.
--
with Gnat.Io; use Gnat.Io;
procedure Slice is
-- Saome random arrays.
type A3 is array(3..5) of Integer;
A: array(1..6) of Integer := (5, 11, 3, 52, 2, 99);
B: A3;

I: Integer;          -- Loop index

-- Random string.
S: String := "Hi there.  How are you?";

-- Some random arrays of the same base type.
type An is array(Integer range <>) of Integer;
C: An(1..6) := (22, 9, 1, 45, 33, 11);
D: An(3..5);

begin
-- This copies a portion of A to B.  Notice that the conversion is
-- required because A and B have different types.
B := A3(A(2..4));
for I in 3..5 loop
Put(B(I));
Put(" ");
end loop;
New_Line;

-- This copies a different portion of A to B.
B := A3(A(4..6));
for I in 3..5 loop
Put(B(I));
Put(" ");
end loop;
New_Line;

-- This copies a portion of A to another.  Notice that slices can
-- appear on the left.
A(1..3) := A(4..6);
for I in 1..6 loop
Put(A(I));
Put(" ");
end loop;
New_Line;

-- This prints some substrings of S.  Substrings are just s just
-- slices of strings, which are just arrays.
Put_Line(S);
Put_Line(S(1..2));
Put_Line(S(5..9));
Put_Line(S(8..20));

-- This copies a portion of C to D.  Notice that the conversion is not
-- required, because C and D are of the same type (type An), even though
-- they have different sizes.
D := C(2..4);
for I in 3..5 loop
Put(D(I));
Put(" ");
end loop;
New_Line;
end Slice;
```
 Array of Arrays Skip and Read