Файлы. Типизированные файлы
Файл- это самостоятельная последовательность символов, записанная в память компьютера. Использование файлов в программировании обусловлено следующими задачами:
1. в файлах могут храниться исходные тексты программ а также входные данные.
2. файлы используются, когда объем данных настолько велик, что задание их в ручном режиме непосильно, невозможно, затратно.
3. файлы требуются для сохранения выходных данных (при многократном сохранении или при сохранении больших объемов).
Бинарные файлы хранят информацию в том виде, в котором она представляется в памяти ПК. Однако эти неудобства компенсируются скоростью работы. Кроме того, текстовые файлы являются структурами послед доступа, а бинарные файлы – прямого доступа. Это означает, что в любой момент времени в структурах прямог доступа можно обратиться к любому элементу по его номеру.
Бинарные файлы делятся на типизированные и нетипизированнные.
Типизированные.
Замечание: переменные структурированных типов данных (кроме строковых) невозможно считать из текстового файла. Например, необходимо ввести из текстового файла данные поля заполнения записи toy
Type toy=record name:string[20];
Price:real;
ageLset of 9..18; {в файле задано границами}
end;
выход из такой ситуации предоставляют типизированные файлы. Их элементы могут принадлежать любому базовому или структурированному типу. Ограничение – все элементы должны ыть одного и того же типа. Если длина компонта может быть известна, то компоненты вычисляются по простой формуле
<начало_структуры>+
<номер_компонента>*
<длина_компонента>
Описание типизированных файлов
Var <файловая перем>:file of
<тип элементов файла>;
Назначение типизированного файла
Assign (f,’<им файла>’);
Открытие и закрытие типизированного файла
Reset (f) – процедура для открытия файла для считывания информации и одновременно для записи в него информации. Если файла не существует, возвращается ошибка. Указатель ставится в начало файла.
Rewrite (f) – открытие файла для записи информации. Если нет файла, он будет создан. Курсор ставится в начало файла. Если файл существовал, вся информация из него исчезнет.
Close (f) – также как и в текстовых файлов.
Считывание из типизированного файла
Считывать из файла можно только переменные, тип данных которых совпадает с типом данных файла.
Поиск в типизированном файле
Eof(f:file):Boolean – смотри текстовые файлы
Filepos(f:file):longint – функция возвращает текущее положение указателя. Если курсор указывает на самый конец файла, содержащего N элементов, то возвращаемое значение будет N.
Filesize(f:file):longint – вычисляет длину файла f в байтах.
Seek(f:file,n:longint) – передвигает указатель в файле на начало записи с номером N. Если окажется, что N больше длины файла, то указатель будет передвинут за реальный конец файла.
Truncate(f:file) – обрезает хвост файла. Все элементы, начиная от текущего и до самого конца файла будут «удалены».
Файлы. Текстовые файлы.
Файл- это самостоятельная последовательность символов, записанная в память компьютера. Использование файлов в программировании обусловлено следующими задачами:
1. в файлах могут храниться исходные тексты программ а также входные данные.
2. файлы используются, когда объем данных настолько велик, что задание их в ручном режиме непосильно, невозможно, затратно.
3. файлы требуются для сохранения выходных данных (при многократном сохранении или при сохранении больших объемов).
Текстовые файлы
Бинарные файлы хранятся в памяти компьютера в машинном коде. Текстовые в понятном для пользователя виде.
Var f1,f2:text; {текстовые файлы}
g: file of <тип _элементов_файла>; {типизированные файлы}
in,out:file; {нетипизированные файлы}
Процедуры для работы с тестовыми файлами:
1. Назначение файла
Assign(f,’имя файла’);
Assign (f, ‘input.txt’);
Assign(f,’output.txt’);
2. Открытие файла.
Reset(f) – открытие файла для считывания из него информации. Если такого файла не существует процедура reset вызовет ошибку и аварийное закрытие программы. Эта же процедура ставит курсор на начало файла.
Rewrite(f) – процедура открытия файла для записи в него информации. Если такой файл не существует, он будет создан. Если файл с таким именем уже есть, вся информация в нем существующая будет стерта.
Append(f) – открытие файла для записи в него информации, при открытии указатель ставится в конец файла. Если такого файла не существовало, он будет создан. Если файл существовал, информация в ней хранящаяся будет сохранена.
Close(f) – процедура закрытия файла.
Read (f,a,b,c) – читает из файла f три переменные a,b,c. После выполнения этой процедуры указатель в файле переместится за переменную с.
Writeln(f,a,b,c) – запись в файл.
Замечание: Пробел в файле является отдельным символом, который тоже можно считать.
Пробельные символы
Это символы, при считывании которых компилятор получает информацию о структуре файла
Специальные символы – специальные процедуры:
Eof(f) – возвращает значение true, если достигнут конец файла. То есть, указатель стоит сразу за последним символом файла.
Seekeof(f) – значение true возвращается в том случае, если конец файла «почти» достигнут (после курсора стоят только пробельные символы и конец файла).
Eoln(f) – возвращает true, если достигнут конец строки файла.
Seekeoln(f) – возвращает true, если конец строки почти достигнут
Замечание: в текстовом файле при записи чисел границами чисел служат пробельные символы. И при считывании чисел эти пробельные символы игнорируются, сколько бы их не было.
Т.О. если ввод многих чисел производится при помощи процедуры read, нет никакой разницы, как именно записаны эти числа: в строку, столбец или несколько строк.
Если считывание текстового файла производится посимвольно, то необходимо учитывать наличие пробельных символов.
В большинства случаев предпочтительнее использование процедур seekeolf и seekeoln, т.к. они предназначены специально для текстовых файлов. Поскольку функции seekeolf и seekeoln пытаются проигнорировать все пробельные символы, результаты их работы отличаются от результатов функции eof и eoln. Даже если это не диагностируется визуально.