Главная/Раздел  4

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Файлы

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

Физический файл.

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

Логический файл.

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

Тип данных - файл.

Файл, - это потенциально бесконечная последовательность компонент одного и того же типа. Количество компонент в файле заранее не оговаривается. Объявляется тип данных файл в разделе объявления типов с помощью служебного слова file, после которого указывается тип компонент файла (базовый тип). Базовым типом может быть любой тип, кроме типа file.

     Type
        f = file of integer;
Переменные типа f будут файлами с целочисленными компонентами.

Файловые переменные.

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

     Var
       as12: f;
В таком случае вы сможете применять эту переменную как параметр процедур или функций. Можно также обявить файловую переменную непосредственно в разделе объявления переменных, но тогда подпрограммы для неё недоступны
     Var
       as: file of byte;

Работа с файлами.

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

Файл может находится в различных состояниях:

  1. файл закрыт;
  2. файл открыт для записи;
  3. файл открыт для чтения.

Assign(var f; name: string);

Процедура Assign предназначена для связывания файловой переменной (логического файла) с конкретным файлом на диске (физическим файлом). f - имя файловой переменной (идентификатор);
name - строка содержащая имя физического файла в операционной системе MS-DOS. Имя файла может содержать путь к файлу (path), например

     c:\turbo\link\std.dat
При отсутствии пути к имени файла подразумевается файл находящийся в текущем катлоге.

Процедура Assign(ff,'bank.dat') связывает файловую переменную (логический файл) ff с физическим файлом на диске bank.dat. После выполнения этой процедуры файловая переменная ff будет представителем в программе физического файла на диске bank.dat.

Reset(var f);

Процедура Reset предназначена для подготовки к чтению или к записи существующего физического файла, связанного с файловой переменной f. Файл должен обязательно существовать. Если файл не пуст, текущий указатель перемещается к первой компоненте файла.

     В противном случае текущий указатель перемещается к концу файла.
     
     Файл становится открытым для чтения и записи.
Rewrite(var f); 

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

Файл становится открытым для записи и закрытым для чтения.

Close(var f);

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

Операции ввода-вывода.

Read(f,v1[,v2,...,vn]);

Процедура Read предназначена для чтения значений из файла в программу. f - файловая переменная. Остальные параметры - переменные в которые будет помещаться информация из компонент файла. Тип этих переменных должен совпадать с базовым типом файла. При прочтении компоненты из файла текущий указатель перемещается к следующей компоненте.

Write((f,v1[,v2,..,vn]);

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

Перемещения по файлу.

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

Seek(var f; n: longint);

Перемещает текущий указатель в файле f на позицию номер n.

Truncate(var f);

Усекает файл (обрезает его) на текущей позиции.

FileSize(var f): longint;

Возвращает текущий размер файла (номер последней компоненты).

FilePos(var f): longint;

Возвращает положение текущего указателя в файле.

EoF(var f): boolean;

Функция определения конца файла. Возвращает значение true, если текущий указатель находится за последней компонентой файла, false в противном случае.

Пример программы.

Задача. Организовать файл целых чисел из N компонент. Определить и вывести на экран среднее арифметическое компонент файла. Вывести содержимое файла на экран.

PROGRAM EX_30_1;

Uses Crt;

Type
  ff=file of integer;       {декларация типа файл целых чисел}

VAR
  log_f: ff;                {декларация логического файла}

   procedure zapolnenie (var f: ff);  {заполнение файла}
   var
      N: integer;           {количество компонент}
      i: integer;           {параметр цикла}
   komp: integer;           {компонента файла}
   begin
    Write('Введите количество компонент в файле: ');
    Readln(N);
    Rewrite(f);             {открытие фала для записи}
    Writeln('Введите компоненты файла: ');
    for i:=1 to N do
      begin
        Read(komp);         {ввод компоненты с клавиатуры}
        Write(f, komp);     {и запись её в файл}
      end;
      Close(f);             {закрытие файла!!!}
   end;

   procedure vyvod (var f: ff);    {вывод файла на экран}
   var
     komp: integer;   {компонента файла}
   begin
    Reset(f);         {открытие файла для чтения}
    while not eof(f) do  {пока не конец файла делать}
     begin
      Read(f,komp);      {чтение следующей компоненты файла}
      Write(komp,' ');   {и вывод её на экран}
     end;
     Close(f);           {закрытие файла!!!}
     Writeln;
   end;

   function sr_ar (var f: ff): real; {определение среднего ар.}
   var
    komp: integer;  {компонента файла}
     sum: real;     {сумма компонент (счётчик)}
   begin
    Reset(f);       {открыть файл для чтения}
    sum:=0;         {обнуление счётчика}
    while not eof(f) do  {пока не конец файла делать}
    begin
     Read(f,komp);  {чтение следующей компоненты файла }
     sum:=sum+komp; {увеличение счётчика суммы}
    end;
    sr_ar:=sum/FileSize(f);  {а вот и результат}
    Close(f);  {закрытие файла!!!}
   end;

BEGIN
 Assign(log_f,'data.dat'); {файл log_f на диске имеет имя data.dat}
   ClrScr;
 zapolnenie(log_f);
   Writeln('Содержимое файла: ');
 vyvod(log_f);
 Writeln('Среднее арифметическое компонент файла = ',sr_ar(log_f));
 Repeat Until Keypressed;
END.

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

  1. Что называют физическим файлом?
  2. Что называют логическим файлом?
  3. Как связывается логический файл с физическим файлом?
  4. Для чего и как открываются файлы?
  5. Как закрыть файл?
  6. Что называют текущим указателем?
  7. Опишите операции ввода-вывода для файлов.
  8. Опишите перемещение в среде типизированных файлов.

Задания для самостоятельного выполнения

  1. Организовать файл целых чисел из N компонент. Определить сумму компонент файла имеющих нечётные индексы.
  2. Организовать файл вещественных чисел из N компонент. Заменить все положительные компоненты файла их квадратными корнями а все отрицательные компоненты их квадратами. Вывести содержимое файла до обработки и после обработки.
  3. Организовать файл целых чисел из N компонент. Определить и вывести на экран максимальное число в файле.
  4. Организовать файл целых чисел из N компонент. Выполнить сортировку файла по возрастанию. Вывести содержимое файла до обработки и после обработки.
  5. Организовать файл целых чисел из N компонент. Удалить из файла все отрицательные компоненты. Вывести содержимое файла до обработки и после обработки.
  6. Организовать файл целых чисел f из N компонент. После этого организовать файлы g и h. В файл g записать все чётные числа из файла f, а в h все нечётные. Вывести на экран содержимое файлов f, g и h.
  7. Организовать символьный файл f из N компонент. После этого организовать файл g содержащий все компоненты файла f в обратном порядке. Вывести содержимое файлов на экран.
  8. Организовать файл символов из N компонент. Определить символ, встречающийся в файле наиболее часто. Вывести на экран этот символ и его количество в файле.
  9. Организовать файл целых чисел, состоящий из N компонент, заменить все элементы файла от -10 до 10 на противоположные. Вывести содержимое файла до и после обработки.
  10. Организовать файл целых чисел из N компонент. Все числа, кратные 3 заменить их удвоенным произведением. Вывести содержимое файла до и после обработки.

НАЗАД                    ДАЛЕЕ

 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz