Обработка текстовых файлов

Текстовые файлы представляют собой поименованную последовательность символов на внешнем носителе, разбитую на строки [6]. В п. 7.2 был приведен пример действий над такими файлами с использованием методов класса TStrings, обрабатывающих массив строк как одно целое. Рассмотрим другой способ взаимодействия с файлом – с помощью файловой переменной (ФП). Язык Delphi, в отличие от языка Turbo Pascal, использует следующие процедуры для работы с файлами.

AssignFile(<ФП>, <Имя файла на диске>) – связывает имя файловой переменной ФП с именем файла на диске.

CloseFile(<ФП>) – закрывает файл.

 
 

Файловая переменная для работы с текстовым файлом описывается так: <ФП> : TextFile. Остальные языковые средства сохраняются. Покажем на простом примере, как обрабатывать текстовые файлы. Создадим форму, представленную ниже. На ней присутствуют интерфейсные элементы для организации диалогов при работе с файлами и пунктов меню.

Текстовые файлы допускают запись в них выражений простых типов, представленных в группе TGroupBox, а также строк. При записи можно указывать формат вывода. Чтение данных из файла производят в переменные любого скалярного типа, кроме логического и перечисляемого, а также в переменные типа string. В интерфейсной секции модуля опишем:

f : TextFile; // ФП для действий с файлом

FileName, s : ShortString; // Имя файла на диске и строка файла.

Коды обработчиков событий имеют следующий вид.

procedure TForm1.FormCreate(Sender: TObject);

begin // При открытии формы удаляются ненужные надписи

Label6.Caption:= ''; Label7.Caption:= ''; Label8.Caption:= '';

Label9.Caption:= ''; Label10.Caption:= '';

end;

 

procedure TForm1.N1Click(Sender: TObject); // Пункт меню "Открыть"

begin

if OpenDialog1.Execute then // Если выполняется диалог, то

begin

FileName := OpenDialog1.FileName; // из него берут имя файла

AssignFile(f, FileName); // Связывание ФП с именем файла

reset(f); // Открываем файл для чтения

repeat

readln(f, s); // Чтение из файла строки в переменную s

Memo1.Lines.Add(s); // Добавление строки s в Memo1

{Memo1.Text := Memo1.Text + s; --> Возможный вариант действий}

until eof(f); // до тех пор, пока не кончится файл

CloseFile(f); // Закрываем файл

end;

end;

 

procedure TForm1.N2Click(Sender: TObject); // Пункт меню "Записать"

var

c : char; // Переменные (выражения)

n : integer; // этих типов

x : real; // можно писать

q : boolean; // в файл

begin

if SaveDialog1.Execute then

begin

FileName := SaveDialog1.FileName;

AssignFile(f, FileName);

if not FileExists(FileName) then rewrite(f) // Создаем файл, если его нет

else begin

Append(f); // Иначе открываем файл для дозаписи в него

writeln(f);

end;

c := Edit1.Text[1];

writeln(f, 'Символ --> ', c);

n := ScrollBar1.Position;

writeln(f, 'Целое число --> ', n);

x := StrToFloat(Edit2.Text);

writeln(f, 'Дробное число --> ', x : 4 : 2); // Форматный вывод в файл

q := StrToBool(Edit3.Text);

writeln(f, 'Булево значение --> ', q);

CloseFile(f);

end;

end;

 

procedure TForm1.N3Click(Sender: TObject); // Пункт меню "Очистить"

begin

Edit1.Text := ''; Edit2.Text := ''; Edit3.Text := ''; Edit4.Text := '';

Memo1.Lines.Clear; // Очистка текста в компоненте Memo1

end;

 

procedure TForm1.ScrollBar1Change(Sender: TObject);

begin // Получение целого числа

Edit4.Text := IntToStr(ScrollBar1.Position);

end;

На следующем рисунке показано окно выполняемой программы.

 
 

Были введены исходные данные в блоке “В файл можно записать”, затем выполнено добавление данных в файл командой меню “Записать” и произведено чтение из файла по команде “Открыть”.

Варианты задания

Создать текстовый(е) файл(ы), содержащий(е):

 

1) информацию о трех книгах: автор, название, год издания. Вывести ее на экран в алфавитном порядке по фамилии автора;

2) операнды большого размера и результат их перемножения в отдельных файлах;

3) данные о трех сотрудниках: ФИО, пол, возраст. По ним определить число мужчин;

4) координаты трех точек на плоскости. Установить их принадлежность кругу радиуса R с центром в начале координат;

5) таблицу истинности для функций XÇY и XÈY (соответственно функции логическое И и логическое ИЛИ);

6) координаты трех пар точек на плоскости. Найти пару с наименьшим расстоянием;

7) список группы с данными о каждом студенте: ФИО, средний балл. Найти средний балл для всей группы;

8) строки, содержащие ‘d’ вместо ‘д’. Исправить ошибки программно;

9) оценки и фамилии в разных файлах. Создать результирующий файл;

10) несколько строк. Сделать последнюю строку первой, предпоследнюю – второй и т.д.;

11) строки с именами и рейтингами работников. Вывести в файл данные о работнике с наивысшим рейтингом с комментарием;

12) три строки. Вставить после каждого символа пробел;

13) пять строк. С помощью подпрограммы, определяющей количество цифр в строке файла, подсчитать их число во всем файле;

14) матрицу 3х3 целых чисел. Вывести в файл суммы элементов строк;

15) построчно матрицу 4х5 с помощью подпрограммы записи в файл вектора целых чисел. Содержимое файла вывести на экран;

16) матрицу 2х6 вещественных чисел. Скопировать ее в другой файл;

17) вектор из 10 случайных вещественных значений. Отсортировать числа в файле по нарастанию;

18) пять строк. Вывести в другой файл латинские буквы строк;

19) вектор из 10 вещественных чисел. Записать в другой файл числа, которые не превышают среднего значения в исходном векторе;

20) случайным образом созданные 5-элементные векторы. Сравнить соответствующие компоненты файлов и записать результаты в файл.