Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность элементов одного типа. Все компоненты файла имеют общее имя. Они становятся доступными нам лишь после того, как мы последовательно пройдем все предыдущие значения.
Зачем нужен файловый тип данных? Количество элементов файла заранее не фиксируется (может уменьшаться или увеличиваться в ходе выполнения программы). Поэтому в нем можно хранить достаточно большое количество данных. После каждого элемента автоматически ставится признак конца элемента, а в конце файла ставится признак конца файла.
Описание файлов Переменные файлового типа могут быть описаны в программе либо явно в разделе переменных Var, либо с использованием раздела типов Type. В разделе переменных: Var : File of ; Например, Var F1: File of Integer; M: File of Char; В разделе типов: Type File_integer = File of Integer; File_char = File of Char; Var F1: File_integer; M: File_char;
Файлы, у которых указывается тип их элементов, называются типизированными. Все компоненты файла имеют общее имя, и каждый имеет еще и свой номер. Начальный элемент имеет нулевой номер. С каждым файлом можно связать понятие – текущий указатель (0)(k)(k)(1)(k+1) … Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который смотрит текущий указатель, перемещающийся в результате выполнения действия на следующий элемент. … Eof
Обработка файлов В Паскале файл является некоторой переменной, поэтому ему можно присвоить имя. С другой стороны существует операционная система, которая в свою очередь использует имена файлов. Поэтому необходимо установить связь между переменной-файлом в Паскале и именем файла, присвоенного операционной системой. Assign(, ); Процедура устанавливает соответствие между файловой переменной и внешним файлом: Например, Assign(F1,А:init.dat); Такое соответствие обозначает, что все операции, выполняемые над переменной F1, будут выполняться над файлом, хранящимся на диске А: и имеющим имя init.dat
Чтение из файла - ввод данных из внешнего файла, находящегося на диске, в оперативную память машины. 1.Открыть файл для чтения – процедура: ReSet( ); 2. Прочитать данные файла в программу, последовательно читая элементы – процедура: Read(, ); Элемент должен быть того же типа, что и компоненты файла.
Запись в файл -Вывод результатов программы из оперативной памяти ЭВМ на диск, т.е. создание нового файла на внешнем устройстве. 1.Открыть файл для записи – процедура: ReWrite( ); 2.Записать данные в файл, при этом запись идет поэлементно – процедура: Write(, ); Элемент должен быть того же типа, что и компоненты файла.
Закрытие файла Процедура: Close( ); Общая форма чтения файла имеет вид: ReSet( ); … Read(, ); … Close( ); Общая форма записи в файл имеет вид: ReWrite( ); … Write(, ); … Close( ); (Многоточием отмечено наличие других операторов в программе)
Признак конца файла Так как, по определению, число элементов файла не задается заранее, то в языке Паскаль введен признак конца файла. Это логическая функция: Eof ( ); Если конец файла достигнут, она принимает истинное значение (TRUE), и ложное значение (FALSE) – в противном случае. While Not EOF ( ) Do … ;
Текстовые файлы - это файлы, содержащие символы, разделенные на строки. Причем в конце каждой строки стоит признак конца строки. Описание: Var A: Text; Особенность текстовых файлов: 1.Элементами этих переменных являются символы, и они имеют текстовую структуру. 2.При чтении и записи числа преобразуются автоматически.
Пример. Дан текстовый файл, содержащий только целые числа, в каждой строке может быть несколько чисел, которые разделяются пробелами. Вывести на экран все числа, с учетом разбиения их на строки и подсчитать количество элементов в каждой строке.
Решение Пусть в файле содержится следующая информация: Этот файл можно создать в среде Turbo Pascal: Создать новый файл (Меню File команда New); Записать числа в строках через пробелы; Сохранить его, например: d:int1.dat Аналогично файл можно создать в среде «Блокнот»d:int1.txt
program Ex1; Var f:text; x,k:integer; begin Assign(f,d:int1.dat'); {связываем с внешним файлом} reset(f); {открываем для чтения} while not eof(f) do begin {пока не конец файла} k:=0; {начальное количество элементов строки} while not eoln(f) do {пока не конец строки} begin read(f,x); {считываем очередное число} write(x,' '); {вывод его на экран} inc(k) {увеличиваем счетчик (k)} end; writeln(' В строке ',k, элементов'); readln(f) {переходим к следующей строке файла } end; close(f); {закрываем файл} readln end.
Задача. 1.Элементы одномерного массива (10 чисел) считать из файла. В файле числа расположены в одной строке. Посчитать сумму элементов получившегося массива. Записать элементы этого массива в другой файл и в конце приписать получившуюся сумму. Все элементы в новом файле расположить по одному в строке.