файлы (информатика).ppt
- Количество слайдов: 22
ФАЙЛОВЫЙ ТИП ДАННЫХ 1 Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. Файл – это набор данных, хранящихся во внешней памяти компьютера под заданным именем. File(англ. ) – подшивка, картотека.
2 ОСОБЕННОСТИ ФАЙЛОВОГО ТИПА ДАННЫХ v Каждому файлу при создании указывается имя, поэтому одна программа может одновременно работать с несколькими файлами. v Длина файла – это число его элементов (компонентов). При создании файла длина файла заранее не задается и ограничивается только емкостью устройств внешней памяти. Файл может быть пустым, его длина в этом случае – ноль.
3 Файловый тип данных удобно использовать… üЕсли заранее создать файл данных, которые затем многократно используются для ввода. üПрограмма, работающая с файлами данных, достаточно автономна и не требует присутствия пользователя. üФайл данных может быть посредником по обмену данными между двумя разными задачами. üФайл может быть средством связи программы с внешней средой.
Файлы и массивы 4 Достоинства: Недостатки: - Размер можно увеличивать - Операции с файлами - уменьшать в ходе выполняются медленнее, выполнения программы; так как файлы хранятся на (размер массива внешнем носителе. оговаривается заранее) (Массив хранится в оперативной памяти) - Файлы позволяют сохранять информацию для последующего использования в том числе и другими программами. (Массив после работы программы удаляется из памяти)
5 Текущий указатель С каждым файлом можно связать понятие – текущий указатель (0) (1) … (k) (k+1) … Eof Указатель файла ведет себя подобно курсору, который все время показывает текущую позицию Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который смотрит указатель текущей позиции файла, перемещающийся в результате выполнения действия на следующий элемент. При открытии или создании файла указатель помещается в его начало.
Виды файлов В Turbo Pascal имеется три вида файлов: Виды файлов Текстовый файл Типизированный файл Нетипизированный файл 6
Файлы различаются по способам доступа к элементам файла 7 По способам доступа Файлы последовательного доступа Файлы прямого доступа
ТЕКСТОВЫЙ ФАЙЛ 10 - это последовательность символов кодовой таблицы компьютера (char), разделенная на строки произвольной длины. В конце каждой строки стоит признак “конца строки” (eoln). В конце файла – конец файла (eof). Они используются для хранения текстов. (Например, программ Turbo Pascal). Особенность текстовых файлов: При чтении и записи числа преобразуются автоматически.
Описание 11 Файловые переменные текстового типа могут быть описаны в программе либо явно в разделе переменных Var, либо с использованием раздела типов Type. В разделе переменных: Var <имя файла>: Text; Например, Var F 1: Text; В разделе типов: Type File. F = Text; Var F 1, F 2: File. F;
Обработка файлов В Паскале файл является некоторой переменной, поэтому ей можно присвоить имя. С другой стороны существует операционная система, которая, в свою очередь, использует имена файлов. Поэтому необходимо установить связь между переменной-файлом в Паскале и именем файла, присвоенного операционной системой. Assign(<имя переменной-файла>, ’<имя внешнего файла>’); Процедура устанавливает соответствие между файловой переменной и внешним файлом: Например, Assign(F 1, ’D: Datainit. dat’); Такое соответствие обозначает, что все операции, выполняемые над переменной F 1, будут выполняться над файлом, хранящимся на диске D: в каталоге ‘Data’ и имеющим имя ’init. dat’
Чтение из файла 15 - ввод данных из внешнего файла, находящегося на диске, в оперативную память машины. 1. Открыть файл для чтения – процедура: Re. Set(<имя-переменной файла>); 2. Прочитать данные файла в программу, последовательно читая элементы – процедура: Read(<имя-переменной_ файла>, <элемент>); Элемент должен быть того же типа, что и компоненты файла. (Например: … Reset(F 1); … Read(F 1, x); … )
Запись в файл 16 вывод результатов программы из оперативной памяти ЭВМ на диск, т. е. создание нового файла на внешнем устройстве. 1. Открыть файл для записи – процедура: Re. Write(<имя-переменной файла>); 2. Записать данные в файл, при этом запись идет поэлементно – процедура: Write(<имя-переменной_ файла>, <элемент>); Элемент должен быть того же типа, что и компоненты файла. - (Например: … Rewrite(F 2); … write(F 2, x); … )
Закрытие файла 17 Процедура: Close(<имя-переменной файла>); Например: Close(F 1); Общая форма чтения файла имеет вид: Re. Set(<имя-переменной файла>); … Read(<имя-переменной_ файла>, <элемент>); … Close(<имя-переменной файла>); Общая форма записи в файл имеет вид: Re. Write(<имя-переменной файла>); … Write(<имя-переменной_ файла>, <элемент>); … Close(<имя-переменной файла>); (Многоточием отмечено наличие других операторов в программе)
Признак конца файла Так как , по определению, число элементов файла не задается заранее, то в языке Паскаль введен признак конца файла – Eof (End Of File). Это логическая функция: Eof(<имя-переменной файла>); Если конец файла достигнут, она принимает истинное значение ‘TRUE ’, и ложное значение ‘FALSE ‘ – в противном случае. … While Not EOF(<имя-переменной файла>) Do …; {Например, читать данные из файла “пока не конец файла”}
19 Пример. Дан текстовый файл, содержащий только целые числа, в каждой строке может быть несколько чисел, которые разделяются пробелами. Вывести на экран все числа, с учетом разбиения их на строки и подсчитать количество элементов в каждой строке.
Решение 20 Пусть в файле содержится следующая информация: -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‘ Аналогично файл можно создать в среде «Блокнот» ‘d: Dataint 1. txt‘
21 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.
22 Задача. Элементы одномерного массива (N чисел) считать из файла. В файле числа расположены в одной строке. Первое число N – количество элементов. Далее через пробел – элементы массива. Посчитать сумму элементов получившегося массива. Записать элементы этого массива в другой файл и в конце приписать получившуюся сумму. Все элементы в новом файле расположить по одному в строке.
23 Задача. Дан текстовый файл, содержащий программу на языке Паскаль. Проверить эту программу на несоответствие числа открывающих и закрывающих круглых скобок. Считать, что каждый оператор программы занимает не более одной строки файла. 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}
24 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;
25 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.
26 Любой программе доступны стандартные текстовые файловые переменные 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.
файлы (информатика).ppt