Структура Паскаль-программы

Автор работы: Пользователь скрыл имя, 20 Февраля 2011 в 19:37, лекция

Описание работы

Программа на языке Паскаль состоит из следующих частей:

Заголовок

Подключение модулей

Раздел описаний

Begin

Раздел операторов

Файлы: 1 файл

Программирование1.doc

— 199.00 Кб (Скачать файл)
p>Список ввода  – это последовательность из одного или более имён переменных типа char, string, а также любого целого или вещественного типа. В эти переменные будут помещаться значения из файла.

Список вывода – это список выражений. Выражения  также разделяются запятыми.

И чтение из файла, и запись в файл производится в  позицию, в которой находится  текущий указатель файла. После  ввода-вывода текущий указатель  перемещается.

Некоторые процедуры и функции для работы с файлами.

Rename(<ф.пер.>, ‘<новое имя файла>’) – переименовать файл. Перед выполнением процедуры файл необходимо закрыть, если он был открыт.

Erase(<ф.пер>) – удаляет файл.

EOF(<ф.пер.>): Boolean – функция проверяет, достигнут ли указателем конец файла.

IOResult: Word – возвращает условный признак последней операции ввода-вывода. Если операция открытия файла прошла успешно, функция возвращает 0, и не 0 в противном случае. Для использования функции необходимо отключить контроль ошибок ввода-вывода. Директива {$I-} перед открытием файла отключает контроль ошибок. После проверки лучше снова включить контроль ошибок директивой {$I+}.

var f: file of char;

begin

assign(f, ‘Myfile.dat’);

{$I-}

Reset(f);

{$I+}

if IOResult <> 0 then writeln(‘Файл не существует’)

 else … 

Текстовые файлы.

Предназначены для хранения текстовой информации. По своей структуре эти файлы  представляют собой последовательность символьных строк переменной длины. Каждая строка текстового файла заканчивается  признаком конца строки (коды CR (13), LF (10)). Заканчивается текстовый файл признаком конца файла (код EOF (26)). К каждой строке текстового файла возможен только последовательный доступ, начиная с первой. То есть, текстовые файлы – это файлы с последовательным доступом.

var ft: text;

begin

assign(ft, ‘    ‘);

reset(ft) / rewrite(ft) / append(ft);

Append(<ф.пер.>) – служит для открытия текстового файла для записи в конец.

Для чтения из текстового файла используются процедуры: Read(ft, <список ввода>), Readln(ft, <список ввода>). Список ввода – последовательность из одного или более имён переменных типа Char, String, а также любого целого или вещественного типов. В эти переменные будут помещаться значения из файла. После любой операции чтения указатель перемещается на следующую позицию.

При обработке  переменных типа Char выполняется чтение одного символа из файла и присваивание считанного значения переменной.

Read(ft, ch);

Если перед  выполнением чтения указатель файла  достиг конца строки, то результатом  чтения будет символ CR с кодом 13. Если указатель стоит на конце файла, то результатом чтения будет символ с кодом 26.

При вводе переменных типа String количество считанных процедурой и помещённых в строку символов равно максимальной длине строки, если только раньше не встретится признак конца строки или конец файла. Признак конца строки в переменную не записывается.

st: string[20];

read(ft, st);

Если строка файла больше, чем длина строковой  переменной, указанной в процедуре  Read, то лишние символы до конца строки файла отбрасываются, а новое обращение к Read вернёт пустую строку. С помощью процедуры Read нельзя прочитать последовательность строк. Для ввода последовательности строк нужно использовать процедуру Readln. Её также можно задавать без списка ввода.

При вводе числовых переменных процедура Read выделяет подстроку во входном потоке по следующему правилу: все пробелы, символы табуляции и маркеры конца строк пропускаются. После выделения первого значащего символа и всех последующих символы пробела, табуляции служат признаком конца подстроки.

x: integer;

Read(ft, x);

Выделенная подстрока  рассматривается как символьное представление числового значения соответствующего типа и преобразуется  во внутреннее представление числа.

Процедуры записи в файл: Write(ft, <список вывода>), Writeln(ft, <список вывода>).

Список вывода – список выражений типа Char, String, Boolean, а также любого целого или вещественного типа. Для любого выводимого параметра можно указывать минимальную ширину поля, в которое будет выведено символьное представление значения.

write(ft, x:4);

При выводе вещественного  числа можно задавать минимальную  ширину поля и количество знаков после  десятичной точки. При использовании  процедуры Writeln выводимая строка символов завершается символами конца строки. Writeln можно задавать и без списка вывода, для файлов это означает пропуск строки.

Три функции, которые  можно применять только к текстовым  файлам:

Eoln(ft: text): Boolean – проверяет, где стоит файловый указатель. Если он стоит в конце текущей строки, то функция возвращает True. В противном случае – False.

SeekEoln(ft: text): Boolean – перемещает файловый указатель до первого значащего символа или до маркера конца строки, пропускает все пробелы и знаки табуляции. Возвращает True, если указатель стоит на маркере конца строки, и False – если на значащем символе.

SeekEof(ft: text): Boolean – работает так же, как SeekEoln, только относительно конца файла, а не строки. 

Типизированные  файлы.

Применяются для  хранения однотипных элементов в  их внутреннем представлении. По своей структуре типизированный файл представляет собой двоичный файл со строго постоянной длиной каждого элемента. Для того чтобы работать с типизированным файлом, в программе должна быть описана переменная следующим образом:

var fp: file of <тип>;

Компоненты типизированного  файла могут быть любого типа, кроме  файлового. Типизированные файлы являются файлами с прямым доступом. Каждый элемент файла нумеруется, самый  первый элемент имеет номер 0. Типизированный файл можно открыть с помощью  процедуры Reset как на чтение, так и на запись. При этом типизированный файл должен существовать. Процедура Rewrite открывает файл только на запись, при этом файл может не существовать. При открытии файла и той, и другой процедурой указатель файла ставится на нулевой элемент.

Для чтения из файла  используется только процедура Read. Список ввода – список имён переменных того же типа, что и тип элементов файла. Для записи используется только процедура Write. Список вывода – список выражений того же типа, что и тип элементов файла.

Seek(fp: file of real, N: longint) – перемещает указатель на номер N элемента файла.

Seek(fp, 0L) – перемещает указатель в начало файла.

FileSize(fp): longint – возвращает количество элементов в файле.

FilePos(fp): longint – возвращает номер элемента файла, на котором стоит указатель.

www.fepo.ru

230101.65

Пример работы с типизированным файлом.

type mas = array[1..100] of real;

var a, b: mas;

      f: file of mas;

begin

assign(f, ‘file.dat’);

rewrite(f);

………… {запись элементов в массивы}

write(f, a, b);

close(f);

end.

Элементом файла  является массив целиком. В такой  файл нельзя записать отдельный элемент  массива или простую переменную вещественного типа.

Из текстового файла прочитать пару вещественных чисел. Считая первое действительной, а второе – мнимой составляющей комплексного числа, записать их в файл комплексных чисел.

program tip-file;

type complex = record

              re, im: real

              end;

var x: complex;

      f1: text;

      f2: file of complex;

begin

assign(f1, ‘tipfile.dat’);

reset(f1);

assign(f2, ‘tipfile.res’);

rewrite(f2);

while not eof(f1) do begin

read(f1, x.re, x.im);

write(f2, x);

end;

close(f1);

close(f2);

end. 

Нетипизированные  файлы.

var data: file;

Нетипизированные  файлы используются для организации доступа к любым дисковым файлам, независимо от их структуры. При этом файл представляется, как последовательность элементов произвольного типа. Единственное, что оговаривается, это размер элемента.

Нетипизированный  файл можно открыть либо на чтение (Reset), либо на запись (Rewrite).

reset(data, [N]);

rewrite(data, [N]);

N – размер одного элемента, указывать необязательно. По умолчанию, размер одного элемента – 128 байт. Размер файла может быть не кратен размеру записи, последняя запись будет неполной.

Для нетипизированных файлов существуют специальные процедуры.

BlockWrite(var f: file; var x; count: word; [var num: word]) – запись в файл.

BlockRead(var f: file; var x; count: word; [var num: word]) – чтение из файла.

f – файловая переменная.

x – буферная переменная, которая будет участвовать в обмене с файлом. При чтении в неё будут записываться элементы, а при записи – считываться из неё и записываться в файл.

count – количество записей, которые должны быть прочитаны (или записаны) за одно обращение к файлу.

num – при выходе из процедуры содержит количество фактически обработанных записей.

Если N – длина одной записи, то за одно обращение к файлу нельзя прочитать больше, чем count*N байт. И эта величина также не может превышать 64 кБ. Длина внутреннего представления переменной x должна быть достаточной для размещения count*N байтов при чтении из файла. Если при записи в файл процедурой BlockWrite на диске не окажется свободного места или при чтении из файла процедурой BlockRead размер буфера (x) окажется меньше указанного произведения, то произойдёт следующее: если параметр num в вызовах процедур не указан, то произойдёт ошибка ввода-вывода; если указан, то ошибка не фиксируется, а после выполнения процедуры его значение не совпадёт с параметром count. По завершению процедур указатель смещается на num записей.

Пример: программа выполняет ввод вещественных чисел из текстового файла и запись их в безтиповой файл блоками по 4 числа.

program createfile;

var buf: array[1..4] of real;

      f_in: text;

      f_out: file;

      i, k: integer;

      name_in, name_out: string;

begin

{$I-}

writeln(‘Введите имя входного файла: ‘);

readln(name_in);

assign(f_in, name_in);

reset(f_in);

if IOResult <> 0 then begin

writeln(‘Файл’, name_in, ‘ не найден’);

 exit;

end;

writeln(‘Введите имя выходного файла: ‘);

readln(name_out);

assign(f_out, name_out);

rewrite(f_out, sizeof(real)*4);

{$I+}

i := 0;

while not eof(f_in) do begin

inc(i);

read(f_in, buf[i]);

if i = 4 then begin blockwrite(f_out, buf, 1); i := 0; end;

end;

if i <> 0 then begin

for k := i + 1 to 4 do buf[k] := 0;

blockwrite(f_out, buf, 1);

end;

close(f_in);

close(f_out);

end.

Truncate(var f) – процедура устанавливает в текущей позиции признак конца файла и удаляет все последующие элементы.

Пример 2: программа, выводящая на экран заданную по номеру запись из файла.

program get_bfile;

var buf: array[1..4] of real;

      f: file;

      i, k: integer;

      filename: string;

begin

writeln(‘Введите имя файла: ‘);

readln(filename);

{$I-}

assign(f, filename);

reset(f, sizeof(real)*4);

if IOResult <> 0 then begin

writeln(‘Файл’, filename, ‘ не найден’);

exit;

end;

{$I+}

while true do begin

 writeln(‘Введите номер записи или -1 для окончания’);

readln(k);

if (k > filesize(f)) or (k < 0) then begin

Информация о работе Структура Паскаль-программы