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

обучение PascalABC

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

Рассмотрим пример программы на PascalABC, которая считывает исходные данные из внешнего файла. Считает сумму и произведение. Записывает результат тоже во внешний файл.

текстовые файлы паскаль

Но прежде немного справочной информации.

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

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

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

f1,f2: text; {текстовые файлы}

Текстовый файл в PascalABC — это совокупность строк произвольной длины, разделенных между собой маркерами конца строки, а весь файл заканчивается маркером — конец файла.

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

Чтобы программа смогла различать записи данных в текстовом файле, их разделяют пробелами. Например, 20 30 45 озеро.

Перед использованием файловой переменной она должна быть связана с внешним файлом с помощью вызова процедуры Аssign.

assign(f1,'inp/input.txt'); {исходный текстовые файл с данными}
assign(f2,'res/output.txt'); {текстовый файл для вывода результатов}

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

Наши файлы расположены в рабочем каталоге PascalABC (C:\PABCWork).

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

reset(f1); {открываем файл для чтения данных}
rewrite(f2); {открываем файл для вывода результатов}

Для текстовых файлов существует специальный вид операций чтения и записи (read и write), который позволяют вам считывать и записывать значения, тип которых отличается от символьного типа. Такие значения автоматически переводятся в символьное представление и обратно. Например, Read(f,i), где i — переменная целого типа, приведет к считыванию последовательности цифр, интерпретации этой последовательности, как десятичного числа, и сохранению его в i.

В нашей программе это строка ниже:

read(f1,x,y,k); {ввод значений х,y,k из файла}

Далее идут команды обработки данных:

z := x + y + k; {вычисление суммы}
p := x * y * k; {вычисление произведения}

Выводим найденные результаты во внешний текстовый файл

writeln(f2,'Сумма = ',z); {вывод результата сложения в файл}
writeln(f2,'Произведение = ',p); {вывод результата произведения в файл}

Перед тем как закончить работу, необходимо закрыть все файлы, которые были использованы программой. Вызов процедуры Close необходим при завершении работы с файлом. Если по какой-то причине процедура Close не будет выполнена, файл все-же будет создан на внешнем устройстве, но содержимое последнего буфера в него не будет перенесено.

close(f1); { закрываем файл с данными }
close(f2); { закрываем файл с результатами }

Итак, запишем код программы целиком.

Задача 1. Даны три целых числа. Найдите их сумму и произведение. Исходные данные находятся в файле Input.txt. Результаты вывести в файл Output.txt.

program zadanie1;
var x,y,k,z,p:integer; {описание переменных}
f1,f2: text; {текстовые файлы}
begin { начало программы}
  assign(f1,'inp/input.txt'); {исходный текстовые файл с данными}
  assign(f2,'res/output.txt'); {текстовый файл для вывода результатов}
  reset(f1); {открываем файл для чтения данных}
  rewrite(f2); {открываем файл для вывода результатов}
    read(f1,x,y,k); {ввод значений х,y,k из файла}
     z := x + y + k; {вычисление суммы}
     p := x * y * k; {вычисление произведения}
    writeln(f2,'Сумма = ',z); {вывод результата сложения в файл}
    writeln(f2,'Произведение = ',p); {вывод результата произведения в файл}
  close(f1); { закрываем файл с данными }
  close(f2); { закрываем файл с результатами }
end. { конец программы }

Перед запуском программы не забудьте сохранить её в рабочем каталоге (C:\PABCWork). Иначе относительный путь к файлу с данными не будет найден.

Для создания исходного файла с данными в PascalABC, создайте новый документ. Запишите числа через пробел и сохраните в нужное место, указав после имени файла расширение txt. В диалоге сохранения Тип файла укажите Все файлы. Также можно воспользоваться программой Блокнот.

Содержимое файла input.txt
23 7 10
Содержимое файла output.txt
Сумма = 40
Произведение = 1610

Дополнительные функции работы с текстовыми файлами

  • Процедура Аppеnd

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

  • Функция Еоf

Параметр f представляет собой файловую переменную, определяющую текстовый файл. Если этот параметр опущен, то используется стандартная файловая переменная Input. Если текущая позиция в файле находится за последним элементом файла или если файл не содержит никаких элементов, то функция Еоf(f) возвращает значение Тruе. В противном случае она возвращает значение False.

  • Функция Eoln

Eoln(f) возвращает True, если текущая позиция в файле совпадает с маркером конца строки или если истинна функция Eof(f); в противном случае Eoln(f) возвращает False.

Задача 2.  В файле input.txt записаны целые числа. Количество чисел неизвестно. Напишите программу, которая вычисляет сумму всех чисел в файле и записывает результат в этот же файл после чисел. Формат результата — «Сумма чисел =».

program zadanie2;
var b, s: longint;  {описание переменных}
    f: text;   {текстовый файл}
begin
assign(f, 'input.txt');    {исходный текстовые файл с данными}
    reset(f);       {открываем файл для чтения данных}
    s:=0;            {обнуляем сумму}
while not eof(f) do    {цикл-пока не закончатся числа в файле}
      begin
           read(f,b);   {читаем число}
           s := s + b;   {выполняем суммирование чисел}
      end;
close(f);     { закрываем файл с данными }
append(f);    {открываем файл для дозаписи результатов}
writeln(f);   {переходим на новую строку в файле}
write(f,'Сумма чисел = ',s);{вывод результата сложения в файл}
close(f);     { закрываем файл}
end.
Содержимое файла input.txt
10 5 21 455 1 0 36 74 51
Содержимое файла input.txt после выполнения программы
10 5 21 455 1 0 36 74 51
Сумма чисел = 653
Рейтинг
( 22 оценки, среднее 4.68 из 5 )
Понравилась статья? Поделиться с друзьями:
Инфоучка
Комментарии: 1
  1. Егор

    Спасибо! Разобрался с текстовыми файлами наконец-то.

Добавить комментарий

× 3 = twelve

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: