В лабораторной работе требуется составить программы, которые будут выполнять различные действия с внешними файлами — записывать в файл информацию, считывать данные из файла, проводить поиск в файлах и так далее. Решение приводится в Delphi 10.3 Rio. Задание №1. Ввести текст с клавиатуры, сохраняя каждую введенную строку в файле text.txt. Работа продолжается, пока не будет введена пустая строка.
Анализ задачи: в тексте задачи не конкретизируется максимальный размер строки, которую необходимо ввести с клавиатуры, поэтому использовать для решения задачи типизированный файл будет неверно (для этих файлов запись должна иметь фиксированный размер). Для решения задачи будет использовать возможности работы Pascal/Delphi с текстовыми файлами.
Решение задачи
- Создаем новое консольное приложение в Delphi
Открываем Delphi и в меню File выбираем «File — New — Other«:
В открывшемся окне выбираем в списке слева пункт «Delphi», а справа — «Console Application»:
Delphi создаст новый консольный проект:
2. Пишем код программы для работы с текстовым файлов в соответствии с заданием
program TextFiles; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; var F: TextFile; s: string; begin AssignFile(F, 'text.txt'); Rewrite(F); repeat writeln('Введите новую строку:'); Readln(s); if Length(S)>0 then Writeln(F, s); until Length(s)=0; CloseFile(F); end.
Рассмотрим алгоритм решения этой задачи:
1. Определяем переменные в разделе var
F: TextFile;
— это файловая переменная для работы с текстовым файлом
s: string;
— это переменная для хранения строки, введенной пользователем с клавиатуры
2. Ассоциируем файловую переменную с внешним файлом на диске:
AssignFile(F, 'text.txt');
Более подробно об этой процедуре — см. здесь.
3. После того, как файловая переменная ассоциирована с внешним файлом, открываем текстовый файл, используя метод Rewrite.
Rewrite(F);
Для открытия текстового файла в Pascal/Delphi могут использоваться три метода — Rewrite, Reset и Append. Однако, так как в тексте задачи не ставится вопрос о том, должен ли файл создаваться заново или файл должен сохраняться и так далее, то я использовал кратчайший путь решения задачи, используя метод Rewrite, который создает новый файл (если файл отсутствует на диске) и открывает его.
4. Создаем цикл с постусловием repeat…until в котором запрашиваем у пользователя ввод очередной строки
repeat writeln('Введите новую строку:'); Readln(s); if Length(S)>0 then Writeln(F, s); until Length(s)=0;
Условие выхода из цикла — длина строки (Length(s)) равна нулю. Внутри цикла проверяется длина строки и, если длина строки больше нуля, то строка s записывается в файл — это делается для того, чтобы пустая строка не записалась в файл перед выходом из программы.
Цикл repeat..until можно заменить на цикл с предусловием while..do, например, так:
writeln('Введите новую строку:'); Readln(s); while Length(s)>0 do begin Writeln(F, s); writeln('Введите новую строку:'); Readln(s); end;
Улучшение программы
Для улучшения программы и, возможно, поощрения со стороны преподавателя, можно предложить следующее улучшение нашей программы — вынести строки приглашение ввода от пользователя и имя файла в раздел констант, что позволит упростить внесение изменений в программу, с одной стороны, а, с другой стороны — ваш Delphi-код станет более чистым :) Улучшенная версия нашей программы может выглядеть, например, вот так:
program TextFiles; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; const cFileName = 'text.txt'; //имя файла для записи сInputStr = 'Введите новую строку:';//строка-приглашение для пользователя var F: TextFile; s: string; begin AssignFile(F, cFileName); Rewrite(F); writeln(сInputStr); Readln(s); while Length(s)>0 do begin Writeln(F, s); writeln(сInputStr); Readln(s); end; CloseFile(F); end.
Файлы для загрузки
Скачать файлы лабораторной работы вы можете со страницы исходников: