Создание динамических массивов

В Delphi предусмотрено использование как традиционных статических, так и динамических массивов. Давайте создадим массив для хранения произвольного количества целых чисел. Его описание будет выглядеть следующим образом:

 

TYPE TA=ARRAY OF INTEGER;

VAR a:TA;

 

Для динамических массивов размерность вообще не указывается.

Первоначальное задание или изменение размеров динамического массива выполняется функцией SetLength(массив, число_элементов). Функция Length(массив) (та же, что работает с текстовыми строками) возвращает текущее количество элементов в массиве, функции Low(массив) и High(массив) – нижнее и верхнее значения индекса массивов соответственно. Нумерация индексов всегда начинается с нуля. Процедура Finalize(массив) удаляет массив целиком из памяти и делает его длину нулевой.

Пусть нам надо прочесть из файла неизвестное заранее количество текстовых строк и занести их в массив. Делается это так:

 

TYPE TA=ARRAY OF STRING;

VAR a:TA; f:TEXTFILE; i:byte;

BEGIN

ASSIGNFILE(f,'1.TXT');

RESET(f);

// цикл до конца файла

WHILE NOT(EOF(f)) DO

BEGIN

// увеличиваем длину массива на единицу

SetLength(a,Length(a)+1);

// считываем строку в последний элемент массива

READLN(f,a[Length(a)-1])

END;

CLOSEFILE(f)

 

Обратите внимание на строку READLN(f,a[Length(a)-1]). Функция Length(a) возвращает число элементов в массиве. Оно на единицу больше индекса последнего элемента. Так, при длине массива в три элемента индексы имеют вид 0,1,2. Поэтому необходимо вычитать единицу для получения индекса последнего элемента.

Теперь выведем содержимое динамического массива в компонент Memo1:

 

Memo1.Lines.Clear;

FOR i:=Low(a) TO High(a) DO

Memo1.Lines.Add(a[i]);