31a46c42b48a01f07cfcf8769e268f76.ppt
- Количество слайдов: 22
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. Файл – это набор данных, хранящихся во внешней памяти компьютера под заданным именем. File(англ. ) – подшивка, картотека. 1
Особенности файлового типа данных v Каждому файлу при создании указывается имя, поэтому одна программа может одновременно работать с несколькими файлами. v Длина файла – это число его элементов (компонентов). При создании файла длина файла заранее не задается и ограничивается только емкостью устройств внешней памяти. Файл может быть пустым, его длина в этом случае – ноль. 2
Файловый тип данных удобно использовать… ü Если заранее создать файл данных, которые затем многократно используются для ввода. ü Программа, работающая с файлами данных, достаточно автономна и не требует присутствия пользователя. ü Файл данных может быть посредником по обмену данными между двумя разными задачами. ü Файл может быть средством связи программы с внешней средой. 3
Файлы и массивы Достоинства: Недостатки: - Размер можно - Операции с файлами увеличивать - уменьшать в выполняются медленнее, ходе выполнения так как файлы хранятся программы; (размер на внешнем носителе. массива оговаривается (Массив хранится в заранее) оперативной памяти) - Файлы позволяют сохранять информацию для последующего использования в том числе и другими программами. (Массив после работы программы удаляется из памяти) 4
Текущий указатель С каждым файлом можно связать понятие – текущий указатель (0) (1) … (k) (k+1) … Eof Указатель файла ведет себя подобно курсору, который все время показывает текущую позицию Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который смотрит указатель текущей позиции файла, перемещающийся в результате выполнения действия на следующий элемент. При открытии или создании файла указатель помещается в его 5 начало.
Виды файлов В Turbo Pascal имеется три вида файлов: Виды файлов Текстовый файл Типизированный файл Нетипизированный файл 6
Файлы различаются по способам доступа к элементам файла По способам доступа Файлы последовательного доступа Файлы прямого доступа 7
Текстовый файл - это последовательность символов кодовой таблицы компьютера (char), разделенная на строки произвольной длины. В конце каждой строки стоит признак “конца строки” (eoln). В конце файла – конец файла (eof). Они используются для хранения текстов. (Например, программ Turbo Pascal). Особенность текстовых файлов: При чтении и записи числа преобразуются автоматически. 10
Описание Файловые переменные текстового типа могут быть описаны в программе либо явно в разделе переменных Var, либо с использованием раздела типов Type. В разделе переменных: Var <имя файла>: Text; Например, Var F 1: Text; В разделе типов: Type File. F = Text; Var F 1, F 2: File. F; 11
Обработка файлов В Паскале файл является некоторой переменной, поэтому ей можно присвоить имя. С другой стороны существует операционная система, которая, в свою очередь, использует имена файлов. Поэтому необходимо установить связь между переменной-файлом в Паскале и именем файла, присвоенного операционной системой. Assign(<имя переменной-файла>, ’<имя внешнего файла>’); Процедура устанавливает соответствие между файловой переменной и внешним файлом: Например, Assign(F 1, ’D: Datainit. dat’); Такое соответствие обозначает, что все операции, выполняемые над переменной F 1, будут выполняться над файлом, хранящимся на диске D: в каталоге ‘Data’ и имеющим имя ’init. dat’
Чтение из файла - ввод данных из внешнего файла, находящегося на диске, в оперативную память машины. 1. Открыть файл для чтения – процедура: Re. Set(<имя-переменной файла>); 2. Прочитать данные файла в программу, последовательно читая элементы – процедура: Read(<имя-переменной_ файла>, <элемент>); Элемент должен быть того же типа, что и компоненты файла. (Например: … Reset(F 1); … Read(F 1, x); … ) 15
Запись в файл - вывод результатов программы из оперативной памяти ЭВМ на диск, т. е. создание нового файла на внешнем устройстве. 1. Открыть файл для записи – процедура: Re. Write(<имя-переменной файла>); 2. Записать данные в файл, при этом запись идет поэлементно – процедура: Write(<имя-переменной_ файла>, <элемент>); Элемент должен быть того же типа, что и компоненты файла. (Например: … Rewrite(F 2); … write(F 2, x); … ) 16
Закрытие файла Процедура: Close(<имя-переменной файла>); Например: Close(F 1); Общая форма чтения файла имеет вид: Re. Set(<имя-переменной файла>); … Read(<имя-переменной_ файла>, <элемент>); … Close(<имя-переменной файла>); Общая форма записи в файл имеет вид: Re. Write(<имя-переменной файла>); … Write(<имя-переменной_ файла>, <элемент>); … Close(<имя-переменной файла>); 17 (Многоточием отмечено наличие других операторов в программе)
Признак конца файла Так как , по определению, число элементов файла не задается заранее, то в языке Паскаль введен признак конца файла – Eof (End Of File). Это логическая функция: Eof(<имя-переменной файла>); Если конец файла достигнут, она принимает истинное значение ‘TRUE ’, и ложное значение ‘FALSE ‘ – в противном случае. … While Not EOF(<имя-переменной файла>) Do …; {Например, читать данные из файла “пока не конец файла”}
Пример. Дан текстовый файл, содержащий только целые числа, в каждой строке может быть несколько чисел, которые разделяются пробелами. Вывести на экран все числа, с учетом разбиения их на строки и подсчитать количество элементов в каждой строке. 19
Решение Пусть в файле содержится следующая информация: -32 16 0 8 7 4 5 9 13 11 -5 -8 6 -8 0 -12 1 2 -1 -2 -4 -1 -2 4 Этот файл можно создать в среде Turbo Pascal: • Создать новый файл (Меню File, команда New); • Записать числа в строках через пробелы; • Сохранить его, например: ‘d: Dataint 1. dat‘ Аналогично файл можно создать в среде «Блокнот» 20 ‘d: Dataint 1. txt‘
program Ex 1; Var f: text; x, k: integer; begin Assign(f, ‘d: Dataint 1. 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. 21
Задача. Элементы одномерного массива (N чисел) считать из файла. В файле числа расположены в одной строке. Первое число N – количество элементов. Далее через пробел – элементы массива. Посчитать сумму элементов получившегося массива. Записать элементы этого массива в другой файл и в конце приписать получившуюся сумму. Все элементы в новом файле расположить по одному в строке. 22
Задача. Дан текстовый файл, содержащий программу на языке Паскаль. Проверить эту программу на несоответствие числа открывающих и закрывающих круглых скобок. Считать, что каждый оператор программы занимает не более одной строки файла. Program ex 2; var f: text; k 1, k 2, n: integer; ch: char; logic, lp: boolean; begin assign(f, 'c: Pascalex 1. pas'); reset(f); {Открываем файл для чтения} n: =0; {счетчик количества строк} logic: =true; {пока ошибки не определены, то значение TRUE} 23
while not eof(f) do {пока не конец файла} begin inc(n); {увеличиваем счетчик количества строк} k 1: =0; {счетчики количества открывающих скобок} k 2: =0; {. . . . . закрывающих. . . } lp: =false; {Lp предназначена для определения ошибки } {расстановки скобок в строке, начальное значение } {‘false’, т. к. пока ошибки расстановки не было} while not eoln(f) do {пока не конец текущей строки файла} begin read(f, ch); {очередной символ строки} if ch='(' then inc(k 1); {если встречена ‘(‘, - увеличиваем k 1} if ch=')' then if (k 1<k 2) then inc(k 2) else lp: =true; {если ‘)’ и она стоит не раньше ‘(‘, то есть значение k 1<k 2 , } {тогда увеличиваем счетчик k 2 , иначе lр даем TRUE} end; 24
if (k 1<>k 2) or lp then {если не все закрывающие скобки } {расставлены (K 1<>K 2) или одна из ‘)’ стоит} {раньше‘(‘ - (lр=TRUE), то была ошибка расстановки} begin writeln(‘Ошибка в ', n, ' строке'); logic: =false; {Помечаем, что в строке была ошибка} end; readln(f) {переходим в следующую строку файла} end; if logic then writeln(‘Скобки расставлены правильно'); {если значение logic остается истинным, то ошибок} {расстановки не было} close(f); {закрываем файл} readln end. 25
Любой программе доступны стандартные текстовые файловые переменные input и output. Input (ввод) – доступный только для чтения файл. Output (вывод) – только для записи файл. Program primer; var i, x, n: integer; begin assign(input, ‘D: Dataexemp_1. txt'); reset(input); assign(output, ‘D: Dataexemp_2. txt'); rewrite(output); read(n); {Считывает из файла ‘D: Dataexemp_1. txt' первое число} For i: =1 to n do begin read(x); {считывает последовательно из файла n чисел} If x>0 then write(x: 6); {Записывает в файл ‘D: Dataexemp_2. txt‘ только положительные числа} end; close(input); close(output); end. 26
31a46c42b48a01f07cfcf8769e268f76.ppt