У тебя
Код:
a:array[1..1000] of string;
drl_string: array [1..1000] of string;
Используется не динамический массив.
Ошибка что выскакивает говорит - что выход за пределы ареса выделенной памяти, - доступ запрещен. (вычерный перевод).
Это бывает по нескольким причинам, в данном случае у тебя больше всего смахивает на то, что при цикле:
Код:
for i := 1 to N do
begin
flag := true;
for l := 1 to N_strok do
if drl_string[l] = a[i] then
flag := false;
if flag = true then
begin
drl_string[N_strok] := a[i];
N_strok := N_strok + 1;
end;
end;
closefile(f); {закрываем исходный файл}
end;
или при цикле:
Код:
begin
i := i + 1; { увеличиваем переменную на единицу }
a[i] := st; { записываем строки в массив }
end;
until i = N; { условие для окончания циклы }
переменная i или N_strok становится больше чем 1000. т.е. программа пытается получить ячейку номером более 1000 из массива, а он состоит из 1000 ячеек (например drl_string[1001] или a[1001]) и в следствии - ошибка. Думаю суть понятна. Используй какой-нибудь примитивный showmessage(inttostr(i)) перед записью/считыванием в массив - что бы видеть какой номер ячейки используется. Более чем уверен, что 1001 будет.