Цель работы: Разработка алгоритмов и написание приложений циклической структуры с использованием подпрограмм и текстовых файлов.
Текстовые файлы являются последовательными файлами, доступ к элементам которых может быть получен только последовательно от начала до конца файла. Термин доступ означает как чтение из файла, так и запись в файл. Ввод из файла – это операция чтения информации из файла, хранящегося на диске, а вывод в файл – это операция записи информации в файл. Текстовый файл состоит из символов и может быть создан с помощью текстового редактора или программно. Информация в текстовом файле разделяется на строки при нажатии клавиши <Enter>, и в конец строки размещаются управляющиесимволы (коды 10 и 13), а весь файл завершается управляющим символом (код 26). Указатель файла ссылается на текущую позицию в открытом файле, с которой начинается чтение или запись. Для получения доступа к текстовому файлу в Turbo Delphi необходимо объявить переменную типа TextFile, которая называется дескриптором (в дескрипторе хранятся атрибуты и указатель файла).
Для работы с текстовыми файлами в Turbo Delphi используются встроенные функции и процедуры (таблица 7):
Таблица 7
Функция | Назначение |
Eof (fv) | Возвращает True, если указатель файла находится в конце файла и False – в противном случае |
EoLn (fv) | Возвращает True, если указатель файла находится в конце строки и False – в противном случае |
SeekEof (fv) | Возвращает True, если до конца файла остались только символы-разделители (пробелы, символы табуляции, символы перехода на новую строку) и False – в противном случае |
SeekEoLn (fv) | Возвращает True, если до конца текущей строки остались только символы-разделители (пробелы, символы табуляции, символы перехода на новую строку) и False – в противном случае |
FileExists(<путь + имя файла >) | Возвращает True, если файл существует и False – в противном случае |
Процедура | Назначение |
Append (fv) | Открывает существующий файл для добавления текста в его конец |
AssignFile(fv,<путь +имя файла >) | Связывает имя файла с дескриптором (файловой переменной) |
CloseFile (fv) | Разрывает связь между файлом и дескриптором (файловой переменной) |
Erase (fv) | Удаляет закрытый файл |
Delete(<путь +имя файла >) | Удаляет закрытый файл |
Read(fv,<список имен переменных>) | Читает данные из текущей строки файла |
ReadLn(fv,<списокимен переменных >) | Читает данные из текущей строки файла и переводит указатель файла на начало новой строки |
Reset (fv) | Открывает существующий файл для чтения |
Rewrite (fv) | Создает и открывает новый файл |
Write(fv,<список имен переменных >) | Записывает данные в строку текстового файла |
WriteLn(fv, <список имен переменных >) | Записывает в строку текстового файла, данные и символы конца строки, и переводит указатель файла на начало следующей строки |
Примечание: В скобках функций и процедур, перечисленных в таблице 7 параметр fv – файловая переменная.
Для получения доступа к файлу его нужно открыть. Текстовый файл можно открыть или для ввода, или для вывода, но не для обеих операций одновременно. Процедура Reset() открывает или повторно открывает текстовый файл в режиме ввода, а процедуры Rewritе() и Append() открывают или повторно открывают текстовый файл в режиме вывода. Причем, процедура Rewrite() или создает новый файл, или уничтожает информацию в существующем файле.
Процедура Read() выполняет следующие операции:
- считывает из файла, ассоциированного с дескриптором, порцию данных, на которую показывает указатель файла;
- сохраняет считанные данные в переменной соответствующего типа (символьного, строкового или числового);
- перемещает указатель файла на начало следующей порции данных.
При выводе в текстовый файл данные можно форматировать. Например, оператор write (Fil, 10:5, 10.45678:8:2) выведет в текстовый файл, ассоциированный с дескриптором Fil, следующий текст: 10 10.46.
Когда работа с файлом завершена, его необходимо закрыть процедурой CloseFile(). Если файл был в режиме вывода (его можно создавать и во время работы приложения), то эта процедура перед закрытием файла записывает в его конец символ конца файла Eof.
Пример 19. В текстовом файле «записей» содержится расписание авиарейсов. Вывести номера авиарейсов, которым соответствуют заданные время и город.
Содержимое текстового файла Flight.txt. сформировано с помощью текстового редактора Turbo Delphi в соответствии с типом tRec, используемым в коде приложения Example _19 (рис.12).
Рис.12. Содержимое текстового файла Flight.txt
Program Example_19;
{$APPTYPE CONSOLE}
Uses SysUtils;
Type
tRec = record // запись
city: string[10];
time: real48
num: word;
end;
Var
Name_File: string;
ch: char;
fv: textFile;
Procedure Find (Var f: textFile);
Var
city_Find: string[10];
time_Find: real48;
n: word;
r: tRec;
i: integer;
Begin
if not FileExists(Name_File) then
begin
writeln ('Файл отсутствует!');
Exit
end
else
begin
reset(f);
writeln ('Укажите:');
write ('город: '); readln (city_Find);
write ('время вылета: '); readln (time_Find);
writeln (' Результат поиска:');
if Length (city_Find) < 10 then
for i:=1 to 10-Length (city_Find) do
city_Find:= Concat (city_Find,' ');
n:=0;
with r do
begin
while not Eof(f) do
while not Eoln (f) do
begin
read (f,city);
read (f,time);
readln (f,num);
if (city_Find = city) and (time_Find <= time) then
begin
n:=n+1;
writeln (n:3,' ',city:10,time:10:2,' № ',num:5)
end;
end;
end;
end;
CloseFile(f);
if n = 0 then writeln ('Рейс отсутствует!!!');
End; {Find}
Begin
write ('Введите имя файла:');
readln (Name_File);
repeat
assignFile (fv,Name_File);
Find (fv);
write ('Продолжить поиск?(y / n)');
readln (ch);
until UpCase(ch)='N';
writeln ('Програма завершена!');
readln
End.
Результат работы приложения представлен в окне вывода (рис.13).
Рис. 13. Результат работы приложения (пример 19)
Варианты заданий
С помощью текстового редактора сформировать исходный файл (F1), каждаястрока которого содержит слова разделенные пробелом. Вывести его содержимое на экран. Далее программно создать второй текстовый файл (F2) в соответствии с заданием варианта и вывести его содержимое на экран. Формирование второго файла, вывод файла, решение задачи варианта оформить в виде отдельных подпрограмм c параметрами.
1. Скопировать в файл F2 только те строки из F1, в которых встречается хотя бы одно слово из первой строки F1.
2. Скопировать в файл F2 только те строки из F1, в которых имеется заданное слово.
3. Скопировать в файл F2 только те строки из F1, которые начинаются и заканчиваются на одну и ту же букву, и подсчитать количество символов в F2.
4. Скопировать из файла F1 в файл F2 те строки, в которых встречается хотя бы одно слово из последней строки F1.
5. Скопировать из файла F1 в файл F2 те строки, в которых имеются слова- палиндромы.
6. Скопировать из файла F1 в файл F2 строки, оставив в каждой строке только слова максимальной длины.
7. Скопировать из файла F1 в файл F2 все строки, в которых встречаются слова- идентификаторы из заданного списка.
8. Скопировать из файла F1 в файл F2 все слова строки, которые содержат цифры, и подсчитать количество строк, которые начинаются на заданную букву в файле F2.
9. Скопировать из файла F1 в файл F2 все строки, которые содержат только одно слово и найти самое длинное слово в файле F2.
10. Скопировать из файла F1 в файл F2 все строки, которые не содержат заданного слова, и найти самое короткое слово в файле F2.
11. Скопировать из файла F1 в файл F2 все строки, кроме той строки, которая содержит самое короткое слово, и вывести номер этой строки.
12. Скопировать из файла F1 в файл F2 все строки, кроме той строки, в которой содержится слово-палиндром максимальной длины.
13. Скопировать из файла F1 в файл F2 все строки, упорядочив слова в каждой строке по алфавиту.
14. Скопировать из файла F1 в файл F2 все строки, содержащие симметричные слова, упорядочив слова в этих строках по алфавиту.
15. Скопировать из файла F1 в файл F2 строки, в которых не встречаются слова- идентификаторы из заданного списка.
16. Скопировать из файла F1 в файл F2 строки, в которых встречаются по два одинаковых слова.
17. Скопировать из файла F1 в файл F2 строки, в которых нет одинаковых слов.
18. Скопировать из файла F1 в файл F2 строки максимальной длины, упорядочив в них слова по алфавиту.
19. Скопировать из файла F1 в файл F2 все строки, в которых содержится не менее двух одинаковых слов, и определить номер слова, в котором больше всего цифр.
20. Скопировать из файла F1 в файл F2 все строки, в которых содержатся только слова, состоящие из чисел. Дописать в конце строк сумму чисел в строке.
21. Скопировать из файла F1 в файл F2 все строки, в которых не содержатся слова, состоящие из чисел. Дописать в конце строки длину строки.
22. Скопировать из файла F1 в файл F2 все строки, в которых содержатся больше заданного числа слов. Дописать в конце строки сумму цифр в строке.
23. Скопировать из файла F1 в файл F2 все строки, в которых есть слова, совпадающие с первым словом строки. Дописать в конце строки количество слов в строке.
24. Скопировать из файла F1 в файл F2 все строки, в которых нет повторяющихся слов. Дописать в конце строки номер строки в файле.
25. Скопировать из файла F1 в файл F2 все строки, в которых есть слова, которые повторяются заданное число раз. Дописать в конце строки количество символов в слове максимальной длины.