Запись файла

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

Для записи файла необходимо:

1. Открыть файл для записи оператором REWRITE (имя файла);

2. Вывести данные оператором WRITE (имя файла, параметры);

3. Закрыть файл для записи CLOSE (имя файла);

Внешний файл, в который записываются данные, называется выходным.

Например, VAR F: TEXT;

begin

ASSIGN(F,’D:\TEST.DAT’);

REWRITE(F);

WRITELN(F,’Привет!’);

CLOSE(F);

end.

Если после создания текстового файла необходимо ввести в него дополнительную информацию, то используют оператор APPEND (F).

Например, VAR F: TEXT;

begin

ASSIGN(F, ‘…’);

REWRITE(F); //

WRITELN(F, ‘Привет!’);

APPEND(F);

WRITELN(F, ‘Мир!!!’);

CLOSE(F);

end.

Если в операторе на месте имени внешнего файла указать стандартное устройство клавиатуры, то данные можно будет вводить с клавиатуры ‘con:’: ASSIGN(F,’CON:’);

Для вывода результатов на печать в качестве внешнего файла необходимо указать печатающее устройство: ASSIGN(F, ‘PRN:’); Необходимо подключить стандартный библиотечный модуль PRINTER.

При обращении к стандартным функциям и процедурам ввода/вывода автоматически производится проверка на наличие ошибок. При обнаружении ошибок программа прекращает работу и выводит на экран сообщение. С помощью директив компилятора {$I-} и {$I+} автоматическую проверку ошибок ввода/вывода можно отключить или выключить. Если автоматическая проверка отключена, ошибки ввода/вывода, возникающие при работе программы, не приводят к её останову. Стандартная функция IORESULT возвращает код ошибки. Нулевое значение кода ошибки означает нормальное завершение операции ввода/вывода.

Задача 12.1. Сформировать файл, состоящий из 10 целых чисел. Считать данные из файла, посчитать их сумму и вывести их на экран.

Листинг программы

PROGRAM TASK1;

USES CRT;

CONST N = 10;

VAR F: FILE OF INTEGER;

X: ARRAY[1..N] OF INTEGER;

I: INTEGER;

S: LONGINT;

ROAD: STRING[30];

BEGIN

CLRSCR;

RANDOMIZE;

ROAD:= 'E:\PASCAL\FILE\TASK1.DAT';

{$I-}

ASSIGN(F,ROAD);

IF IORESULT <> 0 THEN WRITELN ('ERROR ON CREATE FILE!')

ELSE

BEGIN

REWRITE(F);

IF IORESULT <> 0 THEN WRITELN ('ERROR ON OPEN/WRITE FILE!') {$I+}

ELSE

BEGIN

{$I+}

FOR I:= 1 TO N DO

BEGIN

X[I]:= RANDOM(21)-10;

WRITE(F,X[I]);

END;

CLOSE(F);

END;

{$I-}

S:= 0;

I:= 1;

RESET(F);

IF IORESULT <> 0 THEN WRITE ('ERROR ON OPEN FILE!') {$I+}

ELSE

BEGIN

{$I+}

WHILE NOT EOF (F) DO

BEGIN

READ(F,X[I]);

WRITELN(X[I]);

S:= S + X[I];

INC(I);

END;

WRITELN('S=',S:4);

CLOSE(F);

END;

END;

READLN;

ERASE(F);

END.


Задача 12.2. Сформировать файл из 5 компонент строкового типа, считать их из файла. Если первые две компоненты – числа, то образовать их них число и определить является ли оно чётным или нет.

Листинг программы

ROGRAM TASK2;

USES CRT;

CONST N = 5;

ROAD = 'E:\PASCAL\FILE\TASK2.DAT';

VAR F: TEXT;

I: BYTE;

C: CHAR;

S: STRING;

SUM, CODE: INTEGER;

D: ARRAY[1..N] OF STRING;

BEGIN

REPEAT

CLRSCR;

{$I-}

ASSIGN(F,ROAD);

IF IORESULT <> 0 THEN BEGIN WRITELN ('ERROR ON CREATE FILE!');

HALT;

{$I+}

END

ELSE

BEGIN

REWRITE(F);

IF IORESULT <> 0 THEN BEGIN WRITELN ('ERROR ON OPEN/WRITE FILE!');

HALT;

{$I+}

END

ELSE

BEGIN

{$I+}

FOR I:= 1 TO N DO

BEGIN

READLN(D[I]);

WRITELN(F,D[I]);

END;

END;

END;

CLOSE(F);

{$I-}

RESET(F);

IF IORESULT <> 0 THEN BEGIN WRITELN ('ERROR ON READ FILE!');

HALT;

{$I+}

END

ELSE

BEGIN

{$I+}

I:= 1;

WRITELN('OUTPUT');

WHILE NOT SEEKEOF(F) DO

BEGIN

READLN(F,D[I]);

WRITELN(D[I]);

INC(I);

END;

CLOSE(F);

END;

WRITELN;

S:= D[1] + D[2];

VAL(S,SUM,CODE);

IF CODE <> 0 THEN WRITELN ('ERROR IN STATEMENT')

ELSE

BEGIN

IF NOT ODD(SUM) THEN WRITELN ('YES')

ELSE WRITELN ('NO');

END;

WRITE('CONTINUE Y/N?');

READLN(C);

UNTIL (C = 'N') OR (C = 'n');

ERASE(F);

END.

Вопросы для самопроверки

1. Дайте определение файла?

2. Каков формат объявления файловых переменных?

3. Какая существует классификация файлов по способу объявления?

4. Какая существует классификация файлов в зависимости от метода доступа?

5. Каков формат оператора assign?

6. Как организовать чтение файла?

7. Каков формат оператора reset?

8. Как осуществить запись файла?

9. Какие глобальные директивы компилятору позволяют отключить (включить) автоматическую проверку ошибок ввода/вывода?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: