Урок 4. Работа с текстовыми файлами

Урок из серии: «Язык программирования Паскаль«

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

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

Текстовые файлы – это файлы, содержащие символы, разделенные на строки. Причем в конце каждой строки стоит символ конца строки.

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

  1. описать переменную файлового типа;
  2. связать ее с конкретным физическим файлом процедурой Assign;
  3. открыть файл для чтения процедурой ReSet или для записи процедурой ReWrite;
  4. выполнить чтение или запись информации;
  5. по окончании работы с файлом закрыть файл процедурой Close.

Описание переменной файлового типа

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

Var <имя файловой переменной>: Text;

Связь переменной файлового типа с конкретным внешним файлом

Для установления связи между файловой переменной и именем файла, присваиваемого операционной системой, имеется стандартная процедура Assign.

Общий вид:

Assign (<имя файловой переменной >, <имя внешнего файла>);

Например,

Assign(F1, ‘int.dat’)

Такое соответствие обозначает, что все операции, выполняемые над переменной F1, будут выполняться над файлом, хранящемся на диске и имеющим имя ‘Int.dat’

Чтение из файла

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

Для чтения файла в программе необходимо выполнить следующие действия:

Открыть файл для чтения:

Reset (<имя файловой переменной >);

Прочитать данные файла в программу с помощью процедуры Read или Readln .

Процедура Read последовательно считывает все элементы строки:

Read(<имя файловой переменной >,<элемент>)

Процедура Readln – считывает элемент из текущей строки и переходит на следующую строку (независимо от того, достигнут конец строки или нет):

Readln(<имя файловой переменной >,<элемент>)

Если не указывать второй параметр, то произойдет переход в начало следующей строки без ввода данных:

Readln (<имя файловой переменной>)

Закрытие файла

После завершения работы с файлом, его нужно закрыть и «освободить» файловую переменную . Это делается с помощью процедуры Сlose.

Общий вид оператора:

Close(<имя файловой переменной >)

Общая форма чтения файла имеет вид:

Reset(<имя файловой переменной >); {открыть файл для чтения}

Read(<имя файловой переменной >, <элемент>); {считать из файла элемент}

Close(<имя файловой переменной >);{закрыть файл}

Многоточием отмечено наличие других операторов в программе.

Признак конца файла

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

Общий вид функции:

eof(<файловой переменной>).

Она определяет, достигнут ли конец файла или еще нет (принимает значение (true), если достигнут конец файла, и ложь (false) — в противном случае).

Для определения конца файла используется оператор цикла, например, (пока не достигнут конец файла …):

While Not EOF (<имя файловой переменной >) Do …

Запись в файл

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

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

Открыть файл для записи с помощью процедуры  Rewrite:

rewrite (<имя файловой переменной>);

Записать данные в файл спомощью процедур Write или Writeln.

Процедура Write производит запись поэлементно в текущую строку:

Write (<имя файловой переменной >, <элемент>) ;

Процедура WriteLn записывает элемент и переводит указатель в начало следующей строки:

Writeln (<имя файловой переменной >,<элемент>);

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

WriteLn(<имя файловой переменной >);

После завершения работы с файлом его закрытие обязательно.

Общая форма записи файла имеет вид:

ReWrite(<имя файловой переменной >); {открыть файл для записи}

Write(<имя файловой переменной >,<элемент>) ; {Записать элемент в файл}

Close(<имя файловой переменной >);        {закрыть файл}

Логическая функция Eoln()

Часто для обработки текстовых файлов используется специфичная для них функция Eoln(), позволяющая определить, достигнут ли конец строки. Если достигнут — значение функции равно True, а если нет — False.

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

while not Eoln(FileName) do {пока не достигнут конец очередной строки, делай}
    begin
    {группа операторов обработки символов очередной строки}
    end;

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

Решение.

Пусть в файле содержится следующая информация:

-32 16 0 8 7
4 5 9 13 11 -5 -8
6 -8 0 12
1 2
-1 -2 -4
-1 -2 4

Этот файл можно создать в среде Паскаль следующим образом:

  1. Создать новый файл (команда Файл-Новый).
  2. Записать все числа в строке через пробелы.
  3. Сохранить его, например, как ‘primer1.dat’.
    Для этого в диалоговом окне сохранения файла в списке Тип файла выбрать Все файлы. В поле Имя файла ввести полное имя файла (имя с расширением).

Программа будет иметь следующий вид:

program Primer_1;
var f:text;
    x,k: integer;
begin
  assign(F,'primer1.dat'); {связываем с внешним файлом}
  reset(F);            {открываем для чтения}
  while not eof(f) do  {пока не конец файла}
    begin
      k:=0;              {начальное количество элементов строки}
      while not eoln(f)do {пока не конец строки}
        begin
          read(f,x);     {считываем очередное число}
          write(x,' ');  {выводим его на экран}
          inc(k);        {увеличиваем счетчик}
        end;
      writeln('в строке ',k,' элементов');
      readln(f);        {переходим к следующей строке файла}
    end;
  close(f);
end.

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

Урок понравился? Отзывы и замечания можно оставить в форме для комментариев, расположенной в нижней части страницы.

Подписаться
Уведомить о
guest

1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
tatjana
tatjana
4 лет назад

спасибо. полный ответ на вопрос. ещё раз благоларю