Скачать презентацию Программирование на языке Паскаль Модуль 7 Файлы 1 Скачать презентацию Программирование на языке Паскаль Модуль 7 Файлы 1

Паскаль. М7.ppt

  • Количество слайдов: 23

Программирование на языке Паскаль Модуль 7. Файлы 1 Программирование на языке Паскаль Модуль 7. Файлы 1

Файлы Файл – область памяти на внешнем запоминающем устройстве, хранящая (содержащая) определенную информацию. В Файлы Файл – область памяти на внешнем запоминающем устройстве, хранящая (содержащая) определенную информацию. В эту область памяти можно помещать данные (операции ввода, записи), так и извлекать их оттуда (операции вывода, чтения) Какие файлы бывают вообще? Текстовые только текст без оформления, не содержат управляющих символов (с кодами < 32) ACSII (1 байт на символ) UNICODE (2 байта на символ) *. txt, *. log, *. html Двоичные могут содержать любые символы кодовой таблицы *. doc, *. bmp, *. wav, *. avi, Папки (каталоги) *. exe, *. jpg, *. mp 3, *. mpg 2

Файлы Использование файлов целесообразно в случае: 1. долговременного хранения данных ; 2. доступа различных Файлы Использование файлов целесообразно в случае: 1. долговременного хранения данных ; 2. доступа различных программ к одним и тем же данным; 3. обработки больших массивов данных, которые невозможно целиком разместить в оперативной памяти компьютера. • В Паскале определены текстовые файлы, типизированные и нетипизированные. • Файл, не содержащий ни одного элемента, называется пустым. • Создается файл путем добавления новых записей в конец первоначально пустого файла. • Длина файла, т. е. количество элементов, не задается при определении файла.

Файлы Работа с файлами выполняется следующими процедурами: Assign – устанавливает связь между именем файла Файлы Работа с файлами выполняется следующими процедурами: Assign – устанавливает связь между именем файла в программе (файловой переменной ) и физическим именем файла, принятым в ОС. Reset - открывает существующий файл для чтения. Rewrite – создает и открывает новый файл для записи на внешнем устройстве (если файл ранее существовал, вся предыдущая информация из него стирается). Close - закрывает открытый файл. Для определения конца файла используется стандартная встроенная функция EOF (файловая переменная), которая принимает значение True, если достигнут конец файла, и значение False в противном случае.

Принцип сэндвича Переменная типа Принцип сэндвича Переменная типа "текстовый файл": var f: text; I этап. открыть файл : • связать переменную f с файлом assign(f, 'qq. dat'); • открыть файл (сделать его активным, приготовить к работе) reset(f); {для чтения} rewrite(f); {для записи} II этап: работа с файлом read ( f, n ); { ввести значение n } write ( f, n ); { записать значение n } writeln ( f, n ); {c переходом на нов. строку } III этап: закрыть файл close(f); 5

Работа с файлами Особенности: • имя файла упоминается только в команде assign, обращение к Работа с файлами Особенности: • имя файла упоминается только в команде assign, обращение к файлу идет через файловую переменную • файл, который открывается на чтение, должен существовать • если файл, который открывается на запись, существует, старое содержимое уничтожается • данные записываются в файл в текстовом виде • при завершении программы все файлы закрываются автоматически • после закрытия файла переменную f можно использовать еще раз для работы с другим файлом 6

Работа с файлами Особенности текстовых файлов: • Текстовые файлы внутренне разделены на строки, длины Работа с файлами Особенности текстовых файлов: • Текстовые файлы внутренне разделены на строки, длины которых различны. Для разделения строк используется специальный маркер конца строки. • Объявляются текстовые файлы переменной типа text. Обрабатывать их можно только последовательно и с помощью процедур и функций: • Readln (f , st )- чтение строки st из файла f и переход на начало следующей ; • Writeln (f, st )- запись строки st в файл f и маркера конца строки ; • Append (f ) - процедура, открывающая файл f для добавления строк в конец файла; • Eoln (st ) - логическая функция, результат выполнения которой 7 равен TRUE, если достигнут маркер конца строки st.

Последовательный доступ • при открытии файла курсор устанавливается в начало assign ( f, 'qq. Последовательный доступ • при открытии файла курсор устанавливается в начало assign ( f, 'qq. dat' ); reset ( f ); 12 5 45 конец файла (end of file, EOF) 67 56● • чтение выполняется с той позиции, где стоит курсор • после чтения курсор сдвигается на первый непрочитанный символ read ( f, x ); 12 5 45 67 56● 8

Последовательный доступ • чтение до конца строки readln ( f, x ); конец строки Последовательный доступ • чтение до конца строки readln ( f, x ); конец строки (end of line, EOL) 12 5 45¤ 36 67¤ 56● • как вернуться назад? close ( f ); reset ( f ); { начать с начала } 9

Пример Задача: в файле input. txt записаны числа (в столбик), сколько их – неизвестно. Пример Задача: в файле input. txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл output. txt их сумму. ? Можно ли обойтись без массива? Алгоритм: 1. Открыть файл input. txt для чтения. 2. S : = 0; 3. Если чисел не осталось, перейти к шагу 7. 4. Прочитать очередное число в переменную x. 5. S : = S + x; 6. Перейти к шагу 3. цикл с условием "пока есть данные" 7. Закрыть файл input. txt. 8. Открыть файл output. txt для записи. 9. Записать в файл значение S. 10. Закрыть файл output. txt. 10

Программа program qq; var s, x: integer; f: text; begin assign(f, 'input. txt'); reset(f); Программа program qq; var s, x: integer; f: text; begin assign(f, 'input. txt'); reset(f); s : = 0; while not eof(f) do begin readln(f, x); s : = s + x; end; close(f); логическая функция, возвращает True, если достигнут конец файла запись результата в файл output. txt assign(f, 'output. txt'); rewrite(f); writeln(f, 'Сумма чисел ', s); close(f); end. 11

Обработка массивов Задача: в файле input. txt записаны числа (в столбик), сколько их – Обработка массивов Задача: в файле input. txt записаны числа (в столбик), сколько их – неизвестно, но не более 100. Переставить их в порядке возрастания и записать в файл output. txt. ? Можно ли обойтись без массива? Проблемы: 1. для сортировки надо удерживать в памяти все числа сразу (массив); 2. сколько чисел – неизвестно. Решение: 1. выделяем в памяти массив из 100 элементов; 2. записываем прочитанные числа в массив и считаем их в переменной N; 3. сортируем первые N элементов массива; 4. записываем их в файл. 12

Чтение данных в массив Глобальные переменные: var A: array[1. . 100] of integer; f: Чтение данных в массив Глобальные переменные: var A: array[1. . 100] of integer; f: text; Функция: ввод массива, возвращает число элементов function Read. Array: integer; var i: integer; begin assign(f, 'input. txt'); reset(f); i : = 0; цикл заканчивается, если достигнут конец файла или прочитали 100 чисел while (not eof(f)) and (i < 100) do begin i : = i + 1; readln(f, A[i]); end; close(f); Read. Array : = i; end; 13

Программа program qq; var A: array[1. . 100] of integer; f: text; N: integer; Программа program qq; var A: array[1. . 100] of integer; f: text; N: integer; function Read. Array: integer; . . . end; Begin N : = Read. Array; { сортировка первых N элементов } assign(f, 'output. dat'); rewrite(f); for i: =1 to N do writeln(f, A[i]); close(f); end. вывод отсортированного массива в файл 14

Обработка текстовых данных Задача: в файле input. txt записаны строки, в которых есть словопаразит Обработка текстовых данных Задача: в файле input. txt записаны строки, в которых есть словопаразит "короче". Очистить текст от мусора и записать в файл output. txt. Файл input. txt : Мама, короче, мыла, короче, раму. Декан, короче, пропил, короче, бутан. А роза, короче, упала на лапу, короче, Азора. Каждый, короче, охотник желает, короче, знать, где. . . Результат - файл output. txt : Мама мыла раму. Декан пропил бутан. А роза упала на лапу Азора. Каждый охотник желает знать, где сидит фазан. 15

Обработка текстовых данных Алгоритм: пока не кончились данные 1. Прочитать строку из файла (readln). Обработка текстовых данных Алгоритм: пока не кончились данные 1. Прочитать строку из файла (readln). 2. Удалить все сочетания ", короче, " (Pos, Delete). 3. Перейти к шагу 1. Обработка строки s: искать ", короче, " repeat удалить 9 символов i : = Pos(', короче, ', s); if i <> 0 then Delete(s, i, 9); until i = 0; Особенность: надо одновременно держать открытыми два файла (один в режиме чтения, второй – в режиме записи). 16

Работа с двумя файлами одновременно program qq; var s: string; файловые переменные i: integer; Работа с двумя файлами одновременно program qq; var s: string; файловые переменные i: integer; f. In, f. Out: text; открыть файл для чтения begin assign(f. In, 'input. txt'); открыть файл reset(f. In); для записи assign(f. Out, 'output. txt'); rewrite(f. Out); { обработать файл } close(f. In); close(f. Out); end. 17

Полный цикл обработки файла пока не достигнут конец файла while not eof(f. In) do Полный цикл обработки файла пока не достигнут конец файла while not eof(f. In) do begin readln(f. In, s); обработка строки repeat i : = Pos(', короче, ', s); if i <> 0 then Delete(s, i, 9); until i = 0; writeln(f. Out, s); end; запись "очищенной" строки 18

Типизированные файлы – это файлы, состоящие из нумерованной последовательности объектов (записей) любого типа. С Типизированные файлы – это файлы, состоящие из нумерованной последовательности объектов (записей) любого типа. С такими файлами можно работать в режиме прямого доступа, при котором выполняется непосредственное об ращение к любой записи файла. Каждая запись файла имеет свой номер, начиная с 0 и т. д. 19

Типизированные файлы Процедуры и функции обработки файлов типизорованных: 1) Write и Read- записывают и Типизированные файлы Процедуры и функции обработки файлов типизорованных: 1) Write и Read- записывают и читают информацию из указанного файла и перемещают указатель файла к сле дующей записи. 2) Seek (файловая переменная, номер записи); процедура перемещения указателя на запись файла с заданным номером. 3) Truncate (файловая переменная); процедура, усекающая файл по текущей позиции указа теля файла, т. е. все записи, находящиеся после указателя фай ла, удаляются. 4) Функция Filesize (файловая переменная); имеет тип Integer и определяет размер файла, т. е. число записей. 5) Функция Filepos (файловая переменная); имеет тип Integer и возвращает текущую позицию указателя файла. 20

Типизированные файлы Для добавления записей в конец файла используются процедуры: Readln (a ); Seek Типизированные файлы Для добавления записей в конец файла используются процедуры: Readln (a ); Seek (f, filesize (f)); Write (f, a); При этом указатель устанавливается за конец файла, т. к. нумерация записей начинается с нуля. После чего с помощью Write можно добавлять записи. Открывать файл можно только процедурой Reset (f). Для того, чтобы в режиме произвольного доступа считать, а затем изменить значение записи, следует выполнить два вы зова процедуры Seek. Один вызов перед операцией Read, а другой - перед операцией Write (т. к. Read после чтения записи 21 переместит указатель к следующей записи).

Отличия текстовых файлов от типизированных Текстовые файлы в отличие от типизированных имеют ряд преимуществ: Отличия текстовых файлов от типизированных Текстовые файлы в отличие от типизированных имеют ряд преимуществ: 1. Созданный программно текстовый файл можно открыть любым текстовым редактором и посмотреть, что в нём. Если же попытаться сделать это с типизированным файлом, то мы увидим лишь нечитабельные значки-коды. 2. Возможность дозаписи в конец файла - оператор Append(f). Этот оператор существует ТОЛЬКО для текстовых файлов. 22

Отличия текстовых файлов от типизированных Недостатки текстовых файлов. Пусть нам надо отправить в файл, Отличия текстовых файлов от типизированных Недостатки текстовых файлов. Пусть нам надо отправить в файл, а затем считать из файла числовой массив А. Если файл типизированный, то можно просто пользоваться операторами Write(f, A[i]) и Read(f, A[i]) - никаких проблем не возникнет. А вот если файл объявлен текстовым, то все числа будут записаны "сплошняком", без пробелов, и считать массив будет уже невозможно. Потому в этом случае необходимо озаботиться принудительной записью пробелов между числами 23