16833

Вывод данных в текстовый файл

Лекция

Информатика, кибернетика и программирование

Лекция 6 Вывод данных в текстовый файл Процедуры Write и Writeln Вывод данных в текстовый файл осуществляется в основном для просмотра и подготовки к печати результатов работы программы. Вывод данных производится с помощью процедур Write и Writeln. С их помощью можно выводить...

Русский

2013-06-26

404 KB

4 чел.

Лекция 6

Вывод данных в текстовый файл

Процедуры Write и Writeln

Вывод данных в текстовый файл осуществляется в основном для просмотра и подготовки к печати результатов работы программы. Вывод данных производится с помощью процедур Write и Writeln. С их помощью можно выводить (копировать) числа, символы, строки и логические значения из ОП в файл или на устройство (например, на экран или принтер). Форма обращения к процедуре Write:

Write   (   список-данных);

- для вывода данных в стандартный файл Output;

Write   (   файловая-переменная,   список-данных);

- для вывода данных в любой файл или логическое устройство,

где файловая-переменная - имя текстового файла, переменная, которая должна быть типа TEXT и связана с файлом или логическим устройством с помощью процедуры Assign;

список-данных - список, содержащий одно и более выражений, (в том числе констант или имен скалярных переменных, элементов массива или записи). Результатом выражений могут быть значения типа CHAR, STRING, BOOLEAN или арифметические целого или вещественного типа, и форматы для их размещения в выводном текстовом файле. Форматы в списке данных необязательны. С их помощью можно формировать выходные документы в требуемой форме. Например:

Write(F,   А,   В,   С); - в файл F выводятся значения переменных А, В, С; Write   (   А,   В,   С   ) ; - для вывода А, В, С в стандартный файл Output.

Здесь файловая-переменная F должна быть определена как переменная типа TEXT и связана с именем файла или логическим устройством процедурой Assign. Если файл должен быть создан, его надо открыть процедурой Rewrite. Если он был создан и закрыт, а его надо дополнить, то он должен быть открыт процедурой Append.

Если в качестве стандартного файла используется экран, то в общем случае (без применения средств стандартного модуля CRT) вывод производится в нижнюю строку экрана. А по ее заполнении (в строке экрана размещается 80 символов) содержимое экрана автоматически поднимается вверх и вывод продолжается в нижнюю строку экрана. "Поднять" строки экрана, т. е. перевести курсор при выводе на следующую строку, можно с помощью процедуры Writeln.

Если при выводе на экран длина значений, выводимых с помощью процедуры Write, превышает длину строки экрана (80 символов), то по достижении конца строки вывод данных автоматически продолжается на следующей строке экрана. При выводе в текстовый файл длина его строки равна 248 символам.

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

Бесформатный вывод данных в текстовый файл

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

1) целые значения выводятся в виде: -X. . .X (выводится только минус),

где     X - разряды выводимого значения; при этом выделяется количество позиций для всех разрядов выводимого значения и его знака;

2) вещественные значения типа Real выводятся в виде:
    -
X.X ... X    Е±ХХ

мантисса    порядок

количество выводимых разрядов мантиссы, т. е. разрядов числа до и после точки равно 11: один разряд до точки и 10 после нее. Е - признак начала порядка, он выводится со знаком + или -;

  1.  символы и строки выводятся без изменения;

значения логических выражений в зависимости от их значения выводятся
в виде слов
TRUE или FALSE.

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

CONST А=123; AR=-45.678;В='С';С='STROKA';D=TRUE; E=FALSE; BEGIN   WRITELN('A = ',A,' AR = ',AR,

      'В= ','''',В,'''','С= ',С,'D = ' ,D,'E=',E)

END.

Результатом работы приведенного оператора Writeln будет:

А=123 AR=-4.5678000000Е+01 В='С' С=STROKA D=TRUE E=FALSE

Форма выводимого вещественного значения зависит также от используемых типов выводимого значения: single, real, double или extended. Для использования всех вещественных типов необходимо включение числового сопроцессора директивой компилятора N+. Для использования вещественных значений только типа Real это не требуется. Далее по тексту форма вывода значений и количество выводимых разрядов числа при использовании данных типа Real даны без скобок, а для типа Extended - в скобках.

Форматный вывод данных в текстовый файл

Форматы для вывода данных в текстовый файл

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

X   :   W   [   :   d   ]

где     X - выражение для вычисления выводимого значения;

W, d - выражения (в частном случае - имена переменных или десятичные константы) целого типа; W определяет минимальное поле, в котором будет размещено выводимое значение; d - в том числе поле для дробной части числа.

Например: Write (A:12:4,B:13);.

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

Форматный вывод целых, символьных, строковых и логических значений

При выводе целых чисел:

  1.  если поле W не менее требуемого для размещения значения, то выводимое
    значение прижимается в этом поле вправо;
  2.  если W недостаточно для размещения выводимого значения или знака -, то
    автоматически выделяется поле для размещения значения и его знака -;
    для знака + место не выделяется.

Например: А := -12345; Write ( 'А= ' , А:3) ; выведет А= -12345.

При выводе символов выделяется поле, определенное значением W, в котором значение символа прижимается вправо.

Например: В : = ' С' ; Write ( ' В=' , ' ' ' ' , В : 4, " " ); выведет В='   С'.

Для вывода нескольких пробелов, например между двумя выводимыми арифметическими значениями, можно использовать следующее обращение к процедуре: Write( А, ' ' : 5, В ) ;.

В примере между значениями переменных А и В будет 5 пробелов. Например:   А := 1234;   В := 5678; Wr iteln (A, '':5,B);.  B результате будет выведено: 1234 5678.

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

CONST А =123; В ='С'; С = 'STROKA'; D = TRUE; E = FALSE;

BEGIN WRITELN('A =', A:4,'В =', '''': 2, В:2, '''',

            'С =', С:7,'D =' ,D:5,'E =',E:6)

END.

Результатом работы приведенного оператора Writeln будет:

А =  123   В  =  '   С'   С   =   STROKA  D  =  TRUE   Е   =   FALSE

Форматный вывод вещественных значений в форме с плавающей точкой

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

Порядок числа n - это показатель степени, в которую надо возвести 10 -основание системы счисления, и для получения значения числа в форме с фиксированной точкой надо 10n умножить на мантиссу. Примеры чисел в форме с плавающей точкой (в экспоненциальной форме) и в традиционной форме (с фиксированной точкой) даны в табл.3.

Таблица 3.  Примеры вешественных значений

Значение числа в форме с плавающей точкой 

Соответствующая ему традиционная форма 

Значение числа с фиксированной точкой 

-1.2345Е+03 

-1.2345 • !03 

-1234.5 

5.678Е-02 

5.678 • Ю-2 

0.05678 

Например: А :=-123.456; Write ( 'А=',А:12, 'А=',А:9:3);. Оператор Write выведет:

А =   -1.23456Е+02   А  =     -123.456

При выводе вещественных значений с форматом, содержащим только W -поле для вывода значения в форме с плавающей точкой:

1) если W достаточно для размещения выводимого значения, то в этом поле вещественное значение выводится в виде:

      W - размер поля для вывода

_…_-X.XXE±XX          (_…_-X.XXE±XXXX)

     мантисса  порядок           для типа  extended

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

а) 11 для типа Real;

б) 17 для типа Extended; если выделенное поле равно 25, оно вмещает 17
разрядов мантиссы (один - до точки и 16 после точки); если поле более

25, то число с мантиссой из 17 разрядов смещается в выделенном поле вправо, оставляя слева пробелы;

2) если W  <   8   (10) и недостаточно для размещения всех разрядов выводимого значения, то принимается W  =  8  (10); округленное значение выводится в виде:

-Х.ХЕ±ХХ    (    -Х.ХЕ±ХХХХ   )

real         extended

3) если W >  8   (10) и оно недостаточно для размещения всех разрядов числа,
то число округляется до количества разрядов,  которое можно  разместить
в заданном поле, и выводится в виде -Х.Х. . .ХЕ+ХХ  (-Х.Х.. .ХЕ±ХХХХ).
Например:

А =   12.345;   Write    ('A =',   А:10);

выведет А =   1.235Е+01.

Выбор значения W - размера поля для размещения числа в форме с плавающей точкой с требуемой m-разрядной мантиссой производится, исходя из требуемой разрядности мантиссы. Значение W для данных типа Real можно определить по формуле

W = m + 6;

где     m - количество разрядов-мантиссы;

6(8)- количество позиций для размещения порядка, знака числа и точки, для данных типа Real без (6) директивы N+ и с нею (8). Таким образом, для вывода значения типа Real с 5-разрядной мантиссой необходимо W = 5 + 6 =11 ; для вывода числа с 8-разрядной мантиссой значение W=8  +  6  =  14.

Пример вывода вещественных значений в форме с плавающей точкой:

CONST А : = 12.345; В := 45.6789123; С := 345.1234568;

BEGIN WRITELN ('А =', А:11,'В =', В:14, 'С =', С:14)  END.

Результатом вывода будет:

А = 1.2345Е+01 В = 4.5678123Е+01 С = 3.4512347Е+02

Форматный вывод вещественных значений в форме с фиксированной точкой

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

1) если W и d достаточны для вывода значения, то оно формируется в виде

                W - размер поля для вывода

_…_-xx.xx

          d  - количество дробных разрядов

мантисса     - значение числа

Например, значение А =  3.141592 и выводится с помощью

Write   (F,   'А=',А:10:6);

В файл F будет выведено А = ___3.141592, где __ - пробелы;

  1.  если d - количество позиций для вывода дробных разрядов мало, недостаточно для вывода всех дробных разрядов значения, то дробная часть округляется до количества разрядов, которое определяется значением d;

например:

А:=3.141592; Write('А=',А:7:3); в результате будет выведено А = 3.142.

  1.  если при выводе числа поле W достаточно для вывода всех d дробных разрядов, заданных форматом, а для вывода целых разрядов выводимого значения поле W недостаточно, то выделяется дополнительное поле для вывода всех целых разрядов числа и знака -; для знака + поле не выделяется;
    например: А := -1234.567;
    Write ( 'А = ',А: 5 : 3 ); будет выведено А:=1234.567 - для вывода целой части числа и знака числа дополнительно
    выделено 4 позиции;
  2.  если d  <   0, то оно игнорируется и число выведется в формате с плавающей точкой в поле W. Например, то же значение А выводится с помощью

Write ( F, 'A= ', А:10:-6 ) ;

В файл F будет выведено А = -1.235Е+03

С помощью Write (F, 'A=',A:13:-6); будет выведено:

А=-1.234567Е+03

5) если для значений типа Real d > 11(18), то оно уменьшается до d = 11
(18 - для типа
extended).

Например, значение типа extended A= 3.141592 и выводится с помощью

Write ( F, 'A= ', А:22:20);

В файл F будет выведено число с 18 дробными разрядами в виде:

А = 3.141592000000000000

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

Вывод на экран или в текстовый файл символов псевдографики можно осуществить несколькими способами с помощью:

  1.  функции CHR;
  2.  кодов символов в списке данных оператора Write;
  3.  самих символов в списке данных оператора Write.

Если в списке данных оператора Write в качестве элемента списка данных используется обращение к функции CHR, то в файл будет выведено значение символа, код которого дан в качестве фактического параметра функции. Если в списке данных оператора Write приведен код символа с предшествующим ему символом #, то в файл или на экран выводится значение соответствующего ему символа. Например, код символа ║ = 186 и размещение в списке данных #186 выведет символ ║. Для вывода того же символа можно поместить в список данных для вывода само значение символа в апострофах: ||. Очевидно, третий способ вывода символа псевдографики на экран наиболее лаконичен.

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

WRITELN (FR,CHR(186),NZ:10,CHR(179):8,' ',GR, CHR(179): 2,

' ',FIO,CHR(179):13 - LENGTH(FIO), RS:9:2, CHR(186): 4 );

WRITELN ( FR, #186, NZ: 10, #179: 8, ' ', GR, #179: 2,

' ', FIO, #179: 13 - LENGTH(FIO),RS:9:2, #186:4 );

WRITELN ( FR, '' ,NZ:10, '|' :8,' ', GR, '|':2,

' ', FIO, '|':13 - LENGTH (FIO), RS:9:2, '':4);

Результат вывода данных одной строки таблицы:

    88103       | ЭВМ1-1 | ИВАНОВ И.И. |  4000.00  

Процедуры и функции аля работы с текстовыми файлами

Для работы с текстовыми файлами можно использовать процедуры и функции: Assign, открытия и закрытия файлов, Eoln и SeekEoln, Eof и SeekEof, Erase, IOResult, ReName. Рассмотрим функции Eoln, SeekEoln и SeekEof.

Функция Eoln возвращает значение TRUE, если обнаружен признак конца строки, и значение FALSE в противном случае. Функция SeekEoln аналогична функции Eoln, за исключением того, что она пропускает все пробелы и знаки табуляции до признака конца строки или до первого значащего символа. Форма обращения к функциям:

Eoln(файловая-переменная);SeekEoln(файловая-переменная)

Например: Eoln(FILE1);   SeekEoln   (   FILE1   );

Функция SeekEof аналогична функции Eof  за исключением того, что она пропускает все пробелы, признаки табуляции и конца строки до признака конца файла или до первого значащего символа. SeekEof возвращает значение TRUE, если достигнут конец файла, и FALSE в противном случае. Например, если в текстовом файле после последней строки с данными была пустая строка, то она пропускает ее и выдает значение TRUE - признак наличия ситуации "конец файла". Форма обращения к функции:

SeekEof (файловая-переменная);

Например: SeekEof   ( FILE1 );.

Если после имени любой из названных функций нет ни скобок, ни имени файловой переменной, по умолчанию принимается INPUT - имя стандартного файла. Например: Eoln; SeekEoln; SeekEof;.

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

Основные понятия

Типизированные файлы используются для хранения данных типа компонентов файла, определенных при его объявлении. Типизированные файлы могут содержать данные любых типов, кроме файловых. Все компоненты типизированного файла имеют одинаковую длину. Это дает возможность организовать прямой доступ к каждому компоненту файла.

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

Связь логического файла программы с файлом на МД производится с помощью процедуры Assign. Открытие файлов - с помощью процедур Reset и Rewrite. После открытия файла перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Если переменных в списках ввода-вывода несколько, указатель будет смещаться после каждой операции обмена данными, т. е. после ввода или вывода каждого компонента файла.

Файловая переменная типизированного файла должна быть объявлена следующим образом:

Файловая-переменная = FILE OF тип-компонентов;

Пример объявления файловой-переменной для типизированного файла:

TYPE

ST1  = STRING[12];
STRC = RECORD {
Поля записи: }

NZ : 88100 .. 88200;  { - номер зачетки }
GR : STRING[6];       { -
группа }
FIO : ST1; { -
фамилия }

RS : REAL; { - размер стипендии }

END;

FL = FILE OF STRC; { - имя типа типизированного файла } VAR    Z : STRC;    { - переменная типа STRC }

FI:TEXT; { - файловая переменная текстового файла }

   F:FL; {- файловая переменная типизированного файла } { Или: F : FILE OF STRC; }

Ввод данных из типизированного файла. Процедура Read

Процедура Read обеспечивает ввод (копирование) данных из типизированного файла в ОП переменных, определенных в списке данных оператора. Форма обращения к процедуре Read:

Read (файловая-переменная, список-данных );

где     файловая-переменная должна быть объявлена как переменная типа FILE, содержащая определенный тип компонентов;

      список-данных - последовательность имен переменных, разделенных запятыми того же типа, что и компоненты файла.

Например: Read   (   F,   Z   ) ; - читать из файла F в запись Z.

Для чтения данных из файла он должен быть объявлен, создан, связан с физическим файлом с помощью Assign и открыт с помощью процедуры Reset. Схема алгоритма процедуры СНТ - чтения данных из файла F - дана на рис. 2. Пример фрагмента программы, вызывающей СНТ, и вывода из нее с помощью процедуры Р содержимого Z - записей файла дан в листинге  4. Текст процедуры Р содержит вызов процедуры WRITELN.

Чтение данных из файла производится до появления ситуации EOF(F). Использование процедуры Read после исчерпания всех данных файла вызовет ошибку ввода-вывода.

В примере рис. 2 и листинга 4 используются идентификаторы:

СНТ - имя процедуры чтения данных из файла;

Р - имя процедуры для вывода данных записи Z;

F - имя типизированного файла с записями;

Z - имя записи для компонентов типизированного файла F.

Рис. 2

Схема алгоритма процедуры СНТ - чтения данных файла

Листинг 4. Процедура СНТ и ее вызов.

PROCEDURE   СНТ;

BEGIN WRITELN ('ЧТЕНИЕ ФАЙЛА'); RESET(F); { - открытие

                                          файла }

        REPEAT

         READ(F,Z); Р; { - чтение и вывод записи }

   UNTIL EOF(F); CLOSE (F); { - закрытие файла F }

 END;

BEGIN        { Связывание F с физическим файлом: }

ASSIGN ( F, 'FLR6.REZ' );

СНТ; { - вызов процедуры чтения }

END.

Вывод данных в типизированный файл. Процедура Write

Процедура Write используется для вывода (копирования) данных из ОП на МД и записи данных в типизированный файл. Форма обращения к процедуре:

WRITE   (  файловая-переменная,   список-данных  );

где     файловая-переменная - имя файла программы, содержащего определенный тип данных - компонентов файла;

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

Например: WRITE   (   F,   Z   ) ; - вывод записи Z в файл F.

Для записи в типизированный файл он должен быть объявлен, связан с файлом на МД процедурой Assign и открыт. После открытия файла процедурой Rewrite можно выполнять запись данных в файл, т. е. использовать процедуру Write. После открытия созданного типизированного файла процедурой Reset можно выполнять чтение данных из файла и запись данных в файл, например для корректировки данных или дополнения файла новыми записями. На рис. 3 дана схема алгоритма процедуры ZF - записи данных в файл F с использованием процедуры Write. В листинге 5 - программа процедуры ZF.

Рис. 3

Схема алгоритма процедуры ZF - записи данных в файл

Листинг 5. Процедура записи данных в типизированный файл.

PROCEDURE ZF( NF:ST10);

VAR FID:TEXT;  В:CHAR;

BEGIN ASSIGN(FID,NF); RESET(FID);{Открытие файла с 

                                 данными }

REWRITE ( F ); { Открытие типизированного файла }

WITH Z DO   BEGIN         { Присоединение к записи }

WHILE NOT SEEKEOF (FID) DO { Анализ конца данных }

READLN (FID,NZ,B,GR,B,FIO,RS) {Ввод данных из FID в Z }

P; WRITE ( F, Z );  { Вывод данных из Z в текстовый файл

         и в файл F}

END;

CLOSE ( FID );  CLOSE ( F );{ Закрытие файлов }

END; { Конец процедуры ZF}

В примере программы листинга 5 используются переменные:

NF - имя строковой переменной (формального параметра), содержащей имя физического файла, с исходными данными для записи их в файл F;

FID - имя файловой переменной текстового файла с исходными данными для создания файла F;

F - имя типизированного файла, содержащего записи Z;

Z - имя записи, содержащей данные для типизированного файла;

NZ, GR, FIO, RS - имена вводимых элементов, записи Z.

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

Для работы с типизированными файлами, кроме процедур Assign, открытия и закрытия файлов, ввода и вывода данных, можно использовать процедуры и функции: Eof, Erase, ReName, loResult, Seek, FileSize, FilePos и Truncate. Процедуры и функции Eof, Erase, ReName и loResult рассмотрены в разд. 3.1. Рассмотрим здесь только остальные: Seek, FileSize, FilePos и Truncate.

Процедура Seek смещает указатель файла к требуемому компоненту файла. Форма обращения к процедуре Seek:

Seek (файловая-переменная,   номер-компонента );

где     номер-компонента - выражение типа LONGINT, номер требуемого компонента; первый компонент файла имеет номер 0.

Например: Seek   (F,   0) ; - смещение указателя к началу файла F.

Функция FileSize возвращает значение типа LONGINT, которое содержит количество компонентов (записей) файла. Форма обращения:

FileSize (файловая-переменная);

Например: N   :=  FileSize   (   F   ) ;   - определение значения N - количества компонентов файла F.

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

Seek ( F, FileSize (F) ) ;

где     F - файловая-переменная.

Функция FilePos возвращает значение типа LONGINT, порядковый номер того компонента файла, который будет обрабатываться следующей операцией ввода-вывода.

Форма обращения к функции:

FilePos   (   файловая-переменная   )    ;

Например: FilePos   (   F   );.

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

Seek (F, FilePos (F) -1 ) ;

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

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

Формат обращения к процедуре Truncate:

Truncate (файловая-переменная);

Например: Truncate  ( F );.

Пример схемы алгоритма процедуры, использующей усечение файла, дан на рис. 4. Пример соответствующего ей фрагмента программы дан в листинге 6. В примере производится поиск и удаление записи с требуемой фамилией. Если поиск неуспешен, выдается сообщение, что TFM ошибочна. Если поиск успешен, то выводится сообщение Удаляем запись:, с помощью процедуры Р выводится содержимое удаляемой записи. Удаление записи, содержащей фамилию, заданную в TFM, производится путем сдвига всех записей, расположенных после записи с TFM, на одну запись к началу файла F и усечения (укорочения) файла.

Сначала определяется количество записей файла F: KL  =  FileSize(F) ;.

Для поиска удаляемой записи вводится требуемая фамилия из файла FI в переменную TFM.

Вводится запись из файла F в переменную Z.

Анализируется ее значение Z.FIO:

  1.  если Z.FIO <> TFM, анализируется "конец файла F";
  2.  если Z.FIO  =  TFM, т. е. найдена удаляемая запись, выводится ее содер
    жимое с помощью процедуры Р.

Затем анализируется положение указателя:

1) если EOF(F)   =   TRUE, т. е. удаляется последняя запись файла, то указатель перемещается на предпоследнюю запись с помощью

SEEK   (F,   KL   -   1);

  2) если EOF = FALSE, т. е. удаляется не последняя запись, то с помощью цикла по I все записи, расположенные после удаляемой, сдвигаются на одну запись к началу файла.

После установки указателя на последнюю запись или после "сдвига" всех записей, остающихся в файле, выполняется усечение файла с помощью процедуры Truncate (F); , затем производится выход из процедуры с помощью процедуры Exit.

Листинг 6. Фрагмент процедуры удаления записи, используюшей усечение файла.

KL := FileSize (F);   { - количество записей файла }

. . .     READLN ( FI, TFM ); { - ввод TFM из файла FI } REPEAT READ(F,Z);{ - начало поиска записи для удаления} IF TFM=Z.FIO THEN BEGIN {- найдена запись для удаления } WRITELN ('УДАЛЯЕМ ЗАПИСЬ: ');    Р;

IF EOF(F)THEN SEEK (F,KL-1){- удаляем последнюю запись}

        ELSE { Сдвиг записей в сторону начала файла :}

  FOR I := FilePos (F) TO KL - 1  DO   BEGIN

    SEEK (F, I);     READ  (F, Z); { - читать 1-запись}

SEEK (F,I-1); WRITE(F,Z); {- писать ее на место (I-1)-ой}

END;  { - конец сдвига }
Truncate (F);  Exit; { - усечение файла и выход }

END; { - оператора IF }

UNTIL  EOF( F ); { - конец поиска записи в файле F }

WRITELN ( TFM, 'ошибочно')  . . .;

Рис. 4

Схема алгоритма фрагмента процедуры удаления записи и усечения файла

Контрольные вопросы

  1.  Что такое файл?
  2.  Назовите типы файлов, используемых в языке Паскаль.
  3.  Назовите основные виды работ с файлами любых типов.
  4.  Как объявить файлы различных типов?
  5.  Поясните   назначение   и   правила   использования   процедур   Assign,

Open   и Close.

  1.  Поясните назначение и правила использования встроенных подпрограмм для работы с файлами любых типов.
  2.  Что такое массив файлов? В каких случаях его можно использовать? Как обратиться к файлу из массива файлов?
  3.  Что такое текстовый файл?
  4.  Поясните назначение и правила использования операторов ввода данных из текстового файла.
  5.   Поясните назначение и правила использования операторов вывода данных в текстовый файл.
  6.   Что такое формат? Поясните правила использования форматов для вывода данных различных типов.
  7.   Поясните назначение и правила использования встроенных подпрограмм для работы с текстовыми файлами.
  8.   Что такое типизированный файл? Какие типы данных можно в нем хранить?
  9.   Поясните назначение и правила использования процедур ввода и вывода данных в типизированный файл.
  10.   Поясните назначение и правила использования встроенных подпрограмм для работы с типизированным файлом.


 

А также другие работы, которые могут Вас заинтересовать

915. Кава та кофеїн 41.5 KB
  Надмірне захоплення кава підвищує ризик серцевих захворювань. Кава і холестерин. Методи декофеініровання. У жінок його надмірне вживання підвищує ризик розвитку остеопорозу в майбутньому. Кава та здоров'я дитини.
916. Вітаміноподібні речовини їх особливості та значення в метаболізмі 47 KB
  Вітаміноподібні речовини. До них належать вітаміни F і U. Органічні речовини білкової природи, які виконують роль каталізаторів біохімічних процесів. Ароматичні речовини. Енергетична цінність (калорійність) продуктів харчування.
917. Социальная психология 381 KB
  Место социальной психологии в системе научного знания. Выделение социальной психологии в самостоятельную дисциплину и первые исторические формы социально — психологических теорий. Методологические проблемы социально-психологического исследования и общая характеристика методов. Подходы к описанию структуры взаимодействия. Транзактный анализ.
918. Дослідження електричних мереж з розподіленим навантаженням з використанням їх моделей в пакеті Matlab 385.5 KB
  Проведення аналізу втрат активної та реактивної потужностей та напруги в лініях електропередач напругою 10 кВ з рівномірно та нерівномірно розподіленим навантаженням з використанням пакету схемотехнічного моделювання Matlab.
919. Амфифильные полимеры N-винилпирролидона, содержащие дополнительные функциональные группы 566 KB
  Амфифильные полимеры. Основные понятия и характеристики. Применение поливинилпирролидона в медицине. Кровезаменители гемодинамического действия. Общая методика синтеза полимеров N-винилпирролидона, содержащих концевую карбоксильную группу. Синтез полимеров N-винилпирролидона, содержащих боковые эпоксидные группы.
920. Транспортная логистика 151 KB
  Описание логистических процедур транспортировки. Использование в логистике новых концепций. Сравнительные характеристики различных видов транспорта. Выбор основных и вспомогательных логистических посредников в транспортировке. Ранжирование критериев при выборе показателей транспорта.
921. Розробка двосекційного шестеренного насосу. Опис конструкції 593 KB
  Опис конструкції та принципу дії насоса. Гідравлічні розрахунки проточної частини. Розрахунки деталей насоса на міцність. Перевірка довговічності підшипників.
922. Разработка схемы калибровки валков при производстве шестигранной стали 801.5 KB
  Разработка схемы калибровки валков при производстве шестигранной стали, расчет рациональной калибровки по критерию прорабатываемости структуры металла при производстве шестигранника №48 на среднесортном стане 350 ОАО Северсталь.
923. Моделирование и проектирование привода ленточного транспортёра 368 KB
  Предварительные расчеты при подготовке данных для расчета передач на ЭВМ. Эскизное проектирование редуктора. Конструктивные размеры зубчатых колес редуктора. Выбор типа и схемы установки подшипников. Расчет валов редуктора и приводного вала на прочность. Расчет промежуточного вала.