Цель работы: приобретение навыков программирования при решении задач с использованием текстовых файлов, научиться правильно описывать данные, графически описывать алгоритмы обработки текстовых файлов, то есть строить блок-схемы, приобрести навыки программирования с переменными текстового файла.
Контрольные вопросы:
1. Дайте определение текстового файла.
2. Что такое последовательность элементов одного типа?
3. Для чего предназначены бестиповые файлы?
Задачи:
1. Создать текстовый файл
2. Работать с текстовым файлом (редактирование, внести изменение, сортировка и т.д)
3. Сохранить тескстовый файл.
Литературы:
Основная литература:
1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. М.: Наука, 1988. - 320 с.
2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.
3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.
4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.
5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.
6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.
7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.
Дополнительная литература:
1. Перминов О.Н. Программирование на языке Паскаль. М.:Радио и связь, 1988. 224 с.
2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.
3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.
4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. М.: Мир, 1993. 536 с.
5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.
6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.
Методические указания:
Текстовые файлы состоят из символьных строк переменной длины. Каждая строка завершается специальной комбинацией, называемой «конец строки». Комбинация «конец строки» состоит из двух символов: «перевод каретки» (ASCII-код #13) и «перевод строки» (#10). Завершается текстовый файл символом «конец файла» (#26).
Описание текстового файла осуществляется объявлением переменной типа Text:
var файловая_переменная: Text;
Чтение из текстового файла осуществляется операторами Read и ReadLn. Чтобы прочитать данные из файла, в качестве первого параметра указывают имя файловой переменной, а далее через запятую перечисляются переменные, в которые осуществляется чтение данных из файла. В текстовом файле данные хранятся в строковом виде. Однако, если элемент данных может быть преобразован в число, это преобразование осуществляется автоматически при вводе в числовые переменные. Элементы числовых данных в строках текстового файла разделяются пробелами или символами табуляции. Если строка файла закончилась, а состоящий из числовых или символьных переменных список ввода в операторе Read не исчерпался, то ввод продолжается со следующей строки. При вводе данных из текстового файла в символьные переменные элементы данных не разделяются. Если в списке данных после числовой переменной идет строковая, то пробел, который следует после числового значения в файле, считывается в строку (это же справедливо и при считывании в символьную переменную).
Отличие операторов Read и ReadLn при чтении из текстовых файлов состоит в том, что оператор ReadLn, поместив значение в последнюю переменную списка ввода, переходит на начало следующей строки, не считывая оставшиеся в строке данные. С другой стоны, оператор Read остается готовым считывать данные со следующей позиции текущей строки. Так, предположим, что в текстовом файле fимеются две строки:
1 -2
В этом случае два оператора Read(f,m); Read(f,n); поместят в целочисленные переменные m и n соответственно значений 1 и -2, а два оператора ReadLn(f,m);ReadLn(f,n); считают значения 1 и 4.
Пример. В текстовом файле f.txt через пробел и записаны целые числа. Переписать в файл f1.txt из файла f.txt все числа, за исключением максимальных (предполагается, что их может быть несколько).
var f,f1: Text;
a,max: LongInt;
flag: Boolean;
Begin
Assign(f,'f.txt');
Reset(f);
while not Eof(f) do begin
Read(f,a);
if a>max then
max:= a;
end;
Assign(f1,'f1.txt');
Rewrite(f1);
Reset(f);
while not Eof(f) do begin
Read(f,a);
if a<>max then
WriteLn(f1,a);
end;
Close(f);
Close(f1);
end.
В примере файл f.txt прочитывается два раза. Первый раз для определения максимального числа, второй раз — для считывания чисел и их записи во второй файл. Данный алгоритм используется, если максимальных чисел в файле несколько.
Особенностью текстовых файлов является то, что они являются файлами последовательного доступа: нельзя прочитать какой-либо элемент текстового файла, не прочитав все предшествующие элементы. Аналогично нельзя записывать информацию в текстовый файл произвольным образом, писать в него можно только последовательно.
Решение задачи: