ВУЗ:
Составители:
Рубрика:
31
На практике редко возникает необходимость вмешиваться в стандарт-
ный порядок работы процедур. Более того, лучше использовать те
процедуры, которые более соответствуют смыслу программы.
После открытия файла ввод и вывод данных осуществляется стандарт-
ными операторами
Read (f, x) и Write(f, x)
или
Read (f, x1, x2, x3,...x
n
) и Write(f, x1, x2, xЗ,...x
n
).
Первым аргументом должно быть имя логического файла f, с которым
связан конкретный физический файл. А далее должна стоять переменная (или
их список) того же типа, что и объявленный тип компонента файла f, в кото-
рую запишется очередное значение из файла при чтении (Read) или,
наоборот, которая запишется в файл (Write).
В отличие от файлов типа TEXT, типизированные файлы имеют более
строгую внутреннюю структуру. При записи в них записывается машинное
представление очередного компонента, будь то число, массив, запись или
строка. Внутри файла компоненты не отделяются друг от друга (тем не ме-
нее, найти любой компонент не сложно: каждый из них занимает в файле
одинаковый объем, равный размеру его типа). Поэтому не имеет смысла
применять к типизированным файлам операторы ReadLn и WriteLn . В них
просто не существует такого понятия, как строка и ее конец, и нет признака
конца файла (конец определяется длиной файла). Даже если объявить файл
как:
var
f: File of String[80];
он не будет похож на текстовый файл из строк. В нем по-прежнему не будет
символов конца строки, а будет (после записи) сплошная последовательность
символов, кратная 81 (80 символов в строке и байт под длину строки). Хуже
того, если реальные значения строк короче 80 символов, то все равно в файле
окажется по 81 символу
на строку, и “излишки” будут забиты “мусором”.
Поэтому любые попытки трактовать типизированный файл как текст,
особенно попытки вывести его на экран или принтер, вызовут ошибки и не-
предсказуемые последствия.
Преимущества типизированных файлов очевидны: они максимально
эффективным способом хранят числовую информацию, позволяют считывать
и записывать сложные и громоздкие структуры буквально одной командой
,
например:
32
type
Dim100x20 = Array [1..100, 1..20] of Real;
var
XX,YY : dim 100x20;
fin, Fout : File of dim 100x20;
begin
…
Read (fin, XX); {считывание матрицы из файла}
…
Write (fout, YY); {запись матрицы YY в файл}
В то же время эти файлы неоптимальны для хранения строк (лучше ис-
пользовать Text-файлы) и имеют сложное внутреннее представление.
Последнее означает, что если забыть, что именно содержится в подобном
файле, то его просмотр вряд ли возможен.
Размер буфера для типизированных файлов устанавливает автоматиче-
ски, исходя из размера компонентов. Пользователю не предоставляется
возможность изменить корректным способом его размер.
Стандартные процедуры и функции, работающие с
текущим указателем
Первые процедура и две функции только для типизированных файлов
1) Процедура Seek (var f, snr:longint); позиционирует (устанавливает)
текущий указатель на запись с номером snr. Первая запись в файле имеет но-
мер 0. Дальнейшая операция чтения или записи проводится, начиная с
установленной записи.
2) Процедура Filepos (var f):longint; выдает номер записи, на кото-
рой установлен текущий указатель в файле.
3) Процедура Filesize (var f):longint; выдает число записей в файле.
Пустой файл имеет 0 записей. Число записей будет равно 0 всегда после про-
цедуры rewrite (f).
4) Процедура Truncate (var f); усекает файл по текущему положению
курсора. В этой позиции записывается метка конца файла Eof. Процедура ис-
пользуется для всех типов файлов.
На практике редко возникает необходимость вмешиваться в стандарт- type ный порядок работы процедур. Более того, лучше использовать те Dim100x20 = Array [1..100, 1..20] of Real; процедуры, которые более соответствуют смыслу программы. var XX,YY : dim 100x20; После открытия файла ввод и вывод данных осуществляется стандарт- fin, Fout : File of dim 100x20; ными операторами begin Read (f, x) и Write(f, x) или Read (fin, XX); {считывание матрицы из файла} Read (f, x1, x2, x3,...xn) и Write(f, x1, x2, xЗ,...xn). Write (fout, YY); {запись матрицы YY в файл} Первым аргументом должно быть имя логического файла f, с которым связан конкретный физический файл. А далее должна стоять переменная (или В то же время эти файлы неоптимальны для хранения строк (лучше ис- их список) того же типа, что и объявленный тип компонента файла f, в кото- пользовать Text-файлы) и имеют сложное внутреннее представление. рую запишется очередное значение из файла при чтении (Read) или, Последнее означает, что если забыть, что именно содержится в подобном наоборот, которая запишется в файл (Write). файле, то его просмотр вряд ли возможен. В отличие от файлов типа TEXT, типизированные файлы имеют более Размер буфера для типизированных файлов устанавливает автоматиче- строгую внутреннюю структуру. При записи в них записывается машинное ски, исходя из размера компонентов. Пользователю не предоставляется представление очередного компонента, будь то число, массив, запись или возможность изменить корректным способом его размер. строка. Внутри файла компоненты не отделяются друг от друга (тем не ме- нее, найти любой компонент не сложно: каждый из них занимает в файле Стандартные процедуры и функции, работающие с одинаковый объем, равный размеру его типа). Поэтому не имеет смысла текущим указателем применять к типизированным файлам операторы ReadLn и WriteLn . В них просто не существует такого понятия, как строка и ее конец, и нет признака Первые процедура и две функции только для типизированных файлов конца файла (конец определяется длиной файла). Даже если объявить файл 1) Процедура Seek (var f, snr:longint); позиционирует (устанавливает) как: текущий указатель на запись с номером snr. Первая запись в файле имеет но- var мер 0. Дальнейшая операция чтения или записи проводится, начиная с f: File of String[80]; установленной записи. он не будет похож на текстовый файл из строк. В нем по-прежнему не будет символов конца строки, а будет (после записи) сплошная последовательность 2) Процедура Filepos (var f):longint; выдает номер записи, на кото- символов, кратная 81 (80 символов в строке и байт под длину строки). Хуже рой установлен текущий указатель в файле. того, если реальные значения строк короче 80 символов, то все равно в файле 3) Процедура Filesize (var f):longint; выдает число записей в файле. окажется по 81 символу на строку, и излишки будут забиты мусором. Пустой файл имеет 0 записей. Число записей будет равно 0 всегда после про- Поэтому любые попытки трактовать типизированный файл как текст, цедуры rewrite (f). особенно попытки вывести его на экран или принтер, вызовут ошибки и не- предсказуемые последствия. 4) Процедура Truncate (var f); усекает файл по текущему положению Преимущества типизированных файлов очевидны: они максимально курсора. В этой позиции записывается метка конца файла Eof. Процедура ис- эффективным способом хранят числовую информацию, позволяют считывать пользуется для всех типов файлов. и записывать сложные и громоздкие структуры буквально одной командой, например: 31 32
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »