
- •Введение
- •1. Общая схема решения задачи на персональном компьютере
- •2. Свойства алгоритмов. Основные алгоритмические структуры
- •Линейные алгоритмы
- •Развилка
- •3. Консольные приложения в Delphi. Введение в язык Object Pascal. Общая структура программы. Идентификаторы, комментарии, пробелы. Раздел описаний и раздел операторов
- •4. Арифметические типы данных. Числовые константы и переменные. Оператор присваивания. Выражения
- •5. Ввод-вывод данных в Паскале
- •6. Арифметические операции. Стандартные математические функции
- •7. Пример выполнения задания
- •8. Символьный тип данных
- •9. Логический тип данных. Операции сравнения. Логические операции. Битовые операции
- •10. Условный оператор. Блок. Оператор выбора
- •11. Операторы цикла
- •12. Метки. Оператор goto. Процедура Halt
- •13. Интервальные типы данных. Оператор type. Массивы
- •14. Защита от ошибок и отладка программ. Стандартная техника отладки
- •15. Процедуры и функции. Сфера действия описаний
- •16. Множества
- •Include ( множество , выражение );
- •18. Погрешности при вычислениях
- •19. Файлы. Работа с текстовыми файлами
- •Задания для лабораторных работ Лабораторная работа №1. Вычисление простейших арифметических выражений
- •Лабораторная работа №2. Разветвления
- •Лабораторная работа №3. Простейшие циклы
- •Лабораторная работа №4. Итерационные циклы. Вычисление суммы ряда
- •Лабораторная работа №5. Целые числа
- •Лабораторная работа №6. Вычисления с хранением последовательностей
- •Лабораторная работа №7. Двумерные массивы.
- •Лабораторная работа №8. Обработка последовательностей символов
- •Лабораторная работа №9. Использование подпрограмм
19. Файлы. Работа с текстовыми файлами
Научимся работать с внешними файлами: читать из них информацию, записывать информацию в файл, корректировать файлы, создавать новые файлы, переименовывать и уничтожать существующие файлы. Различают три типа файлов: текстовые, типизированные и бинарные. Это различие влияет лишь на способы обращения к файлу, один и тот же файл на диске программа может рассматривать и как текстовый, и как типизированный, и как бинарный. Рассмотрим текстовые файлы.
Для работы с текстовым файлом в программе следует описать файловую переменную типа TEXT:
VAR f : TEXTFILE;
которая называется дескриптором файла. В дескрипторе хранится указатель файла, который похож на курсор в текстовом редакторе. Как и курсор, указатель файла обозначает текущую позицию в открытом текстовом файле. В режиме чтения информации из файла указатель файла определяет следующий элемент данных, который будет считан из файла. В режиме записи указатель файла определяет позицию, в которую будет записан следующий элемент данных.
Описав дескриптор файла, необходимо связать или инициализировать файл, т.е. установить связь файловой переменной с файлом на диске процедурой
1. AssignFile(VAR f:TEXT; Name:String) ,
где Name - правильно построенное имя файла, существующего или вновь создаваемого. Если файл находится не в текущей папке - в той, где хранится ваша программа, в Name должно быть указано полное имя файла, включая имя диска и всех папок.
После этого для доступа к файлу выполняется открытие файла одной из трех процедур:
2. Reset(VAR f:TEXT) - открывает файл для чтения.
3. Rewrite(VAR f:TEXT) - открывает файл для записи.
4. Append(VAR f:TEXT) - открывает файл для записи в конец файла. Процедуры Reset и Append выполняются только для существующих файлов, процедура Rewrite - для любых файлов, но если файл существует, он будет уничтожен и создан заново. Чтение из файла и запись в файл выполняются процедурами READ[LN] и WRITE[LN], но перед списком ввода или вывода задается файловая переменная:
5. Read[Ln](VAR f:TEXT; список ввода).
6. Write[Ln](VAR f:TEXT;список вывода).
Списки ввода и вывода строятся точно так же, как и в случае ввода с клавиатуры и вывода на экран. Особенностью текстовых файлов является то, что они состоят из строк, каждая из которых заканчивается символом конца строки. Процедура WriteLn записывает в файл этот символ, а процедура Write - нет. Вы можете сами управлять длинами записываемых строк, в нужный момент вызывая процедуру WriteLn. При вводе следует помнить, что если символ конца строки не считан процедурой ReadLn, то следующая строка недоступна. Как правило, текстовый файл используется для хранения строк или символов, но можно держать там и числа.
Для текстовых файлов определены четыре логические функции:
7. Function EOLN(VAR f:TEXT):Boolean - возвращает TRUE, если при чтении достигнут конец строки.
8. Function EOF(VAR f:TEXT):Boolean - возвращает TRUE, если при чтении достигнут конец файла.
9. Function SeekEOLN(VAR f:TEXT):Boolean - возвращает TRUE, если в строке больше нет ничего, кроме пробелов.
10. Function SeekEOF(VAR f:TEXT):Boolean - возвращает TRUE, если в файле нет больше ничего, кроме пробелов.
Функция EOLN пригодится вам, если вы читаете из текстового файла символы; функция EOF - если вы читаете символы или строки, а функции SeekEOLN и SeekEOF необходимы при вводе чисел из текстового файла. Функции EOLN и SeekEOLN также могут быть полезны при обычном вводе с клавиатуры. Приведем пример: пусть необходимо ввести некоторый массив натуральных чисел и некоторый массив символов. Известно, что в обоих массивах не более 100 элементов. Запишем программу, которой не нужно заранее знать, сколько элементов будет введено, это удобнее, чем сначала запрашивать количество элементов в массиве.
const nmax=100;
var x : array[1..nmax] of word;
c : array[1..nmax] of char;
i, nx, nc : byte;
begin
nx:=0; nc:=0;
writeln(Rus('введите числа'));
{вводим все числа, заканчивая клавишей enter}
while not seekeoln do
begin inc(nx);
read(x[nx]);
end;
{считываем конец строки, иначе не введутся символы}
readln;
{вводим символы, заканчивая клавишей enter}
writeln(Rus('введите символы')); while not eoln do
begin inc(nc);
read(c[nc]);
end;
writeln(Rus('введено '),nx,Rus(' чисел :'));
for i:=1 to nx do
write(x[i]:8);
writeln;
writeln(Rus('введено '),nc,Rus(' символов :'));
for i:=1 to nc do
write(c[i]);
writeln; readln;readln;
end.
Вернемся к работе с файлами. Файл закрывается процедурой.
11. Procedure Close(VAR f:TEXT),
после чего файловую переменную можно использовать для других целей. Любой файл можно удалить с диска процедурой.
12. Procedure Erase(VAR f).
Удаляемый файл должен быть инициализирован, но не открыт, или открыт, но затем закрыт. Напишем программу, которая читает текстовый файл и выводит его на экран. Для ее работы нам понадобится создать при помощи любого текстового редактора файл, сохранить его под именем test.txt в той же папке, где будет храниться наша программа:
var f : textfile;
s : string;
const name='test.txt';
begin
assign(f,name);
reset(f);
while not eof(f) do
begin readln(f,s);
writeln(s);
end;
close(f); readln
end.
Теперь выполним то же самое, не используя строку:
var f : text;
c : char;
const name='test.txt';
begin
assign(f,name);
reset(f);
while not eof(f) do
begin
while not eoln(f) do
begin read(f,c);
write(c);
end;
readln(f);
writeln;
end;
end.
Если в этой программе опустить READLN(f) , то она зациклится. Прочтем из текстового файла числа (в таком файле должны быть записаны только числовые константы и пробелы):
var f : text;
x : single;
const name='num.txt';
begin
assign(f,name);
reset(f);
while not seekeof(f) do
begin read(f,x);
write(x:10:5);
end; readln
end.
Числа в текстовом файле могут быть записаны как в одной, так и в нескольких строках и разделяться любым количеством пробелов.