На відміну від циклу for – to – do, у циклі repeat – until не вказується кількість ітерацій та початкова умова циклу. У цьому циклі є тільки кінцева умова, по виконанню якої цикл завершує свою роботу.
Загальна структура циклу repeat – until має вигляд
repeat
оператор;
оператор;
...
оператор;
until умова_виходу;
Використовуючи цей цикл слід формувати послідовність операторів та умову виходу з циклу таким чином, щоб умова виходу могла бути досягнутою. У противному випадку цикл буде нескінченним. Умовою виходу може бути довільна умова або змінна булевського типу.
Приклад читання тексту з файлу з використанням repeat - until.
Прочитати з текстового файлу a.txt, що розташований на диску c:\, рядки тексту і вивести їх на екран у ListBox.
Для програми потрібно буде розташувати на формі об'єкти Button1, OpenDialog1, ListBox1. Також знадобляться змінні: 2 рядкових, 1 текстова.
Форма матиме вигляд, наприклад

Далі, опишемо головну подію для об'єкту Button1. Для цього досить двічі клацнути мишкою у сам об'єкт. Отримаємо процедуру:
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Опишемо змінні:
procedure TForm1.Button1Click(Sender: TObject);
var
s, s1:string;
f:textfile;
begin
end;
Далі, для того, щоб встановити ім'я файлу, треба отримати його з OpenDialog1 таким чином:
procedure TForm1.Button1Click(Sender: TObject);
var
s, s1:string;
f:textfile;
begin
if OpenDialog1.Execute then s1:=OpenDialog1.FileName;
end;
Наступним кроком є підготовка файлу до читання.
procedure TForm1.Button1Click(Sender: TObject);
var
s, s1:string;
f:textfile;
begin
if OpenDialog1.Execute then s1:=OpenDialog1.FileName;
assignfile(f,s1);
reset(f);
end;
Тепер потрібно зчитувати з файлу по рядкам інформацію (наприклад у змінну s) і додавати ці рядки до ListBox1, причому робити це поки не досягнемо кінця файлу. Для цього нам доведеться організувати цикл (наприклад repeat - until). Текст процедури матиме вигляд:
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1:string;
f:textfile;
begin
if OpenDialog1.Execute then s1:=OpenDialog1.FileName;
assignfile(f,s1);
reset(f);
repeat
readln(f,s);
ListBox1.Items.Append(s);
until eof(f);
end;
Але тепер, якщо при роботі програми двічі натиснути клавішу Button1 і вибрати файл, то зміст ListBox1 буде складатись з двох файлів, що були відкриті. Щоб запобігти цьому нам потрібно додати оператор очистки вікна ListBox1 - ListBox1.Items.Clear;. Тоді текст процедури матиме вигляд:
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1:string;
f:textfile;
begin
if OpenDialog1.Execute then s1:=OpenDialog1.FileName;
assignfile(f,s1);
reset(f);
ListBox1.Items.Clear;
repeat
readln(f,s);
ListBox1.Items.Append(s);
until eof(f);
end;
І нарешті, після роботи з файлом, його потрібно закрити. Це робиться за допомогою оператора closefile.
Тоді повний текст модуля матиме вигляд:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1:string;
f:textfile;
begin
if OpenDialog1.Execute then s1:=OpenDialog1.FileName;
assignfile(f,s1);
reset(f);
ListBox1.Items.Clear;
repeat
readln(f,s);
ListBox1.Items.Append(s);
until eof(f);
closefile(f);
end;
end.