1 Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. Файл – это набор данных, хранящихся во внешней памяти компьютера под заданным именем. File( англ.) – подшивка, картотека.
2 Особенности файлового типа данных Каждому файлу при создании указывается имя, поэтому одна программа может одновременно работать с несколькими файлами. Длина файла – это число его элементов (компонентов). При создании файла длина файла заранее не задается и ограничивается только емкостью устройств внешней памяти. Файл может быть пустым, его длина в этом случае – ноль.
3 Файловый тип данных удобно использовать… Если заранее создать файл данных, которые затем многократно используются для ввода. Программа, работающая с файлами данных, достаточно автономна и не требует присутствия пользователя. Файл данных может быть посредником по обмену данными между двумя разными задачами. Файл может быть средством связи программы с внешней средой.
4 Файлы и массивы Достоинства: -Размер можно увеличивать - уменьшать в ходе выполнения программы; (размер массива оговаривается заранее) -Файлы позволяют сохранять информацию для последующего использования в том числе и другими программами. (Массив после работы программы удаляется из памяти) Недостатки: - Операции с файлами выполняются медленнее, так как файлы хранятся на внешнем носителе. (Массив хранится в оперативной памяти)
5 С каждым файлом можно связать понятие – текущий указатель Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который смотрит указатель текущей позиции файла, перемещающийся в результате выполнения действия на следующий элемент. При открытии или создании файла указатель помещается в его начало. (0)(k)(k)(1)(k+1) … … Eof Текущий указатель Указатель файла ведет себя подобно курсору, который все время показывает текущую позицию
6 Виды файлов В Turbo Pascal имеется три вида файлов: Виды файлов Текстовый файл Типизированный файл Нетипизированный файл
7 Файлы различаются по способам доступа к элементам файла По способам доступа Файлы последовательного доступа Файлы прямого доступа
8 Файлы последовательного доступа Файлы, к элементам которых доступ выполняется в той же последовательности, в которой они записывались. При чтении или записи указатель файла перемещается к следующему элементу и делает его доступным для обработки. Для поиска нужного элемента необходимо перемещать указатель до тех пор, пока он не будет помещен на искомый элемент.указатель файла Для таких файлов запрещено одновременно читать и записывать данные в файл. После каждого элемента автоматически ставится признак конца элемента, в конце строки – признак конца строки, а в конце файла – признак конца файла.
9 Файлы прямого доступа Файл представляет собой последовательность элементов только одного типа. Доступ к элементам файла осуществляется по их адресу (номеру). При поиске нужного элемента достаточно указать номер его позиции. Для таких файлов разрешается одновременная запись и считывание данных
10 Текстовый файл - это последовательность символов кодовой таблицы компьютера (char), разделенная на строки произвольной длины. В конце каждой строки стоит признак конца строки (eoln). В конце файла – конец файла (eof). Они используются для хранения текстов. (Например, программ Turbo Pascal). Особенность текстовых файлов: При чтении и записи числа преобразуются автоматически.
11 В разделе переменных: Var : Text; Например, Var F1: Text; В разделе типов: Type FileF = Text; Var F1, F2: FileF; Описание Файловые переменные текстового типа могут быть описаны в программе либо явно в разделе переменных Var, либо с использованием раздела типов Type.типов Type
12 Для хранения однородной информации (например, только чисел определенного типа) выгоднее использовать типизированные файлы – последовательности элементов одного типа и длины. При описании файлов указывается тип их элементов. В каждый момент времени программе доступен только один – текущий элемент, на который установлен указатель файла. Все компоненты файла имеют общее имя, и каждый – свой номер. Номер начального элемента – 0 (ноль). Типизированные файлы Т.к. все элементы файла имеют одинаковую длину, позиция каждого элемента легко вычисляется. Это файлы обеспечивают прямой доступ к элементам.
13 Переменные файлового типа могут быть описаны в программе либо явно в разделе переменных Var, либо с использованием раздела типов Type.типов Type В разделе переменных: Var : File of ; Например, Var F1: File of Integer; {файл чисел целого типа} Fch : File of Char; {файл символьных данных} В разделе типов: Type File_integer = File of Integer; File_char = File of Char; Var F1: File_integer; Fch: File_char; Описание
Обработка файлов В Паскале файл является некоторой переменной, поэтому ей можно присвоить имя. С другой стороны существует операционная система, которая, в свою очередь, использует имена файлов. Поэтому необходимо установить связь между переменной-файлом в Паскале и именем файла, присвоенного операционной системой. Assign(< имя переменной-файла >,< имя внешнего файла >); Процедура устанавливает соответствие между файловой переменной и внешним файлом: Например, Assign(F1,D:\Data\init.dat); Такое соответствие обозначает, что все операции, выполняемые над переменной F1, будут выполняться над файлом, хранящимся на диске D: в каталоге Data и имеющим имя init.dat
15 Чтение из файла - ввод данных из внешнего файла, находящегося на диске, в оперативную память машины. 1.Открыть файл для чтения – процедура: ReSet( ); 2. Прочитать данные файла в программу, последовательно читая элементы – процедура: Read(, ); Элемент должен быть того же типа, что и компоненты файла. (Например: … Reset(F1); … Read(F1,x);… )
16 Запись в файл -вывод результатов программы из оперативной памяти ЭВМ на диск, т.е. создание нового файла на внешнем устройстве. 1.Открыть файл для записи – процедура: ReWrite( ); 2.Записать данные в файл, при этом запись идет поэлементно – процедура: Write(, ); Элемент должен быть того же типа, что и компоненты файла. (Например: … Rewrite(F2); … write(F2,x);… )
17 Закрытие файла Процедура: Close( ); Например: Close(F1); Общая форма чтения файла имеет вид: ReSet( ); … Read(, ); … Close( ); Общая форма записи в файл имеет вид: ReWrite( ); … Write(, ); … Close( ); (Многоточием отмечено наличие других операторов в программе)
Признак конца файла Так как, по определению, число элементов файла не задается заранее, то в языке Паскаль введен признак конца файла – Eof (End Of File). Это логическая функция: Eof ( ); Если конец файла достигнут, она принимает истинное значение TRUE, и ложное значение FALSE – в противном случае. … While Not EOF ( ) Do … ; {Например, читать данные из файла пока не конец файла}
19 Пример. Дан текстовый файл, содержащий только целые числа, в каждой строке может быть несколько чисел, которые разделяются пробелами. Вывести на экран все числа, с учетом разбиения их на строки и подсчитать количество элементов в каждой строке.
20 Решение Пусть в файле содержится следующая информация: Этот файл можно создать в среде Turbo Pascal: Создать новый файл (Меню File, команда New); Записать числа в строках через пробелы; Сохранить его, например: d:\Data\int1.dat Аналогично файл можно создать в среде «Блокнот» d:\Data\int1.txt
21 program Ex1; Var f:text; x,k:integer; begin Assign(f,d:\Data\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.
22 Задача. Элементы одномерного массива (N чисел) считать из файла. В файле числа расположены в одной строке. Первое число N – количество элементов. Далее через пробел – элементы массива. Посчитать сумму элементов получившегося массива. Записать элементы этого массива в другой файл и в конце приписать получившуюся сумму. Все элементы в новом файле расположить по одному в строке.
23 Задача. Дан текстовый файл, содержащий программу на языке Паскаль. Проверить эту программу на несоответствие числа открывающих и закрывающих круглых скобок. Считать, что каждый оператор программы занимает не более одной строки файла. Program ex2; var f:text; k1,k2,n: integer; ch:char; logic,lp:boolean; begin assign(f,'c:\Pascal\ex1.pas'); reset(f); {Открываем файл для чтения} n:=0; {счетчик количества строк} logic:=true; {пока ошибки не определены, то значение TRUE}
24 while not eof(f) do {пока не конец файла} begin inc(n); {увеличиваем счетчик количества строк} k1:=0; {счетчики количества открывающих скобок} k2:=0; { закрывающих......} lp:=false; {Lp предназначена для определения ошибки } {расстановки скобок в строке, начальное значение } {false, т.к. пока ошибки расстановки не было} while not eoln(f) do { пока не конец текущей строки файла } begin read(f,ch); {очередной символ строки} if ch='(' then inc(k1);{если встречена (, - увеличиваем k1} if ch=')' then if (k1
25 if (k1k2) or lp then {если не все закрывающие скобки } {расставлены (K1K2) или одна из ) стоит} {раньше ( - (lр=TRUE), то была ошибка расстановки} begin writeln( Ошибка в ',n,' строке'); logic:=false; {Помечаем, что в строке была ошибка} end; readln(f) {переходим в следующую строку файла} end; if logic then writeln( Скобки расставлены правильно'); {если значение logic остается истинным, то ошибок} {расстановки не было} close(f); {закрываем файл} readln end.
26 Любой программе доступны стандартные текстовые файловые переменные input и output. Input (ввод) – доступный только для чтения файл. Output (вывод) – только для записи файл. Program primer; var i,x,n:integer; begin assign(input,D:\Data\exemp_1.txt'); reset(input); assign(output,D:\Data\exemp_2.txt'); rewrite(output); read(n); { Считывает из файла D:\Data\exemp_1.txt' первое число} For i:=1 to n do begin read(x); { считывает последовательно из файла n чисел} If x>0 then write(x:6); { Записывает в файл D:\Data\exemp_2.txt только положительные числа} end; close(input); close(output); end.