Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Тема лекции № 6. Работа с файлами



Читайте также:
  1. I. ЛАБОРАТОРНАЯ РАБОТА
  2. I.ПОЛИТИЧЕСКАЯ РАБОТА
  3. II. Основная часть аттестационная отчёта — личная работа врача за последние три года
  4. II. Работа в бумажном виде
  5. II. Работа с раздаточным материалом
  6. II. Работа со сносками
  7. III. Коррекционная работа при дисграфиях «анализа синтеза».

 

Цель лекции: изучение основ работы с файлами.

План лекции: Работа с файлами данных. Файлы последовательного доступа. Запись и чтение файлов последовательного доступа. Основные файловые функции. Примеры использования файлов в программировании.

Ключевые слова: файл, файл последовательного доступа, файл прямого доступа.

 

Для связи системы или приложения с файлом имеется канал ввода/вывода. При открытии файлу ставится в соответствие канал с определенным номером. Допустимо использование номеров 1-511. Каждый открытый файл имеет собственный канал, с помощью которого записываются или считываются данные. Следовательно, для ввода и вывода данных в файл имеет значение не имя файла, а номер канала. Операционная система должна иметь сведения о наличии свободных каналов, которые можно использовать для открытия файлов. Visual Basic имеет функцию FreeFile[(диапазонНомеров)], возвращающую номер свободного канала, который можно использовать для работы с файлом. Если свободных каналов нет (открыто максимально допустимое количество каналов), возникает ошибка выполнения. Необязательный параметр ДиапазонНомеров позволяет определить диапазон значений, из которых выбирается очередной свободный номер канала:

· 0 (по умолчанию) — возвращается номер канала из диапазона 1—255;

· 1 — возвращается номер канала из диапазона 256-511. В Visual Basic реализованы три типа доступа к файлам:

· последовательный (для обработки текстовых файлов);

· произвольный (для обработки текста или структурированных двоичных файлов с записями фиксированной длины);

· двоичный (для обработки произвольно структурированных файлов).

С помощью метода GetFileInfo можно легко получать информацию о свойствах файла. Свойства объекта FileInfo включают атрибуты, время создания, каталог, имя каталога, существование файла, расширение, полное имя, время последнего доступа, время последней записи, размер и имя.

Если файл не существует, исключение не возникает; вместо этого оно возникает при первой попытке доступа к свойствам объекта.

Последовательный файл состоит из текстовых строк ASCII-формата. Любая информация считывается или сохраняется в текстовом виде построчно. Последовательные файлы могут обрабатываться любым текстовым редактором.

Способ открытия файла с последовательным доступом (для чтения, записи или добавления) задается при вызове оператора открытия файла:

Open <ИмяФайла> For <Режим> As <Дескриптор Файла>,

где ИмяФайла определяет имя открываемого файла — это либо строка символов, заключенная в кавычки, либо выражение, значением которого является строка символов. Она представляет собой путь к открываемому файлу; режим — это режим доступа, который может иметь значения:

· Input (Ввод) — если файл открывается для чтения из него текстовых данных;

· Output (Вывод) — если файл открывается для записи в него данных, начиная с первой позиции. Вся имевшаяся в нем старая информация будет стерта;

· Append (Дополнение) — если файл открывается для записи в него данных не с первой, а с конечной позиции, так что вся имевшаяся в нем старая информация будет сохранена.

ДескрипторФайла — целое число, по которому идентифицируется открываемый файл. Файловые номера используются при выполнении файловых операций в программе.

Все открытые файлы закрываются оператором:

Close [<СписокДескрипторов>]

СписокДескрипторов — это записанные через запятую дескрипторы файлов, которые должны быть закрыты. При отсутствии этого параметра будут закрыты все открытые файлы.

Для записи в файл используются операторы;

Print # <ДескрипторФайла>, [<СписокЗначений>] Write.# <ДескрипторФайла>, [<СписокЗначений>],

где СписокЗначений — это записанные через разделитель значения (или выражения).

Оба оператора записывают данные в файл текстовыми строками. Текстовая строка — это последовательность символов, которая заканчивается символом перехода на яовую текстовую строку или символом возврата каретки (коды 13 и 10). Текстовый файл представляет собой последовательность текстовых строк.

При использовании оператора Write разделителем в списке значений является запятая. Список значений просматривается последовательно, и элементы этого списка записываются в одну текстовую строку файла через запятую. Элементы типа String заключаются в кавычки. После записи последнего элемента записывается символ перехода на новую строку.

При использовании оператора Print элементы списка значений в этом операторе должны быть разделены либо точкой с запятой, либо запятой. От этого зависит, как они будут записаны в текстовую строку файла:

· значения будут записываться подряд, без промежутков между ними;

· значения будут записываться в 14-символьные зоны вывода.

Кроме того, в списке значений оператора могут присутствовать функции:

· Spc(n) — для вставки п пробелов между значениями в текстовой строке;

· Tab(n) — для указания номера п позиции для записи следующего значения.

Для чтения из файла используются:

· оператор Input # <ДескрипторФайла> <СписокПеременных>;

· оператор Line Input # <ДескрипторФайла> <Переменная>;

· функция Input (<ЧислоСимволов>, <дескриптор Файла>);

· Оператор Input.

Список Переменных — это записанные через запятую переменные любого типа. В каждой текстовой строке файла количество и тип значений должны совпадать с количеством и типом переменных в списке переменных.

При использовании оператора Line Input Переменная — это переменная типа String или Variant. Результатом работы этого оператрра является присвоение Переменной значения — всей очередной текстовой строки файла.

При использовании функции Input ЧислоСимволов — это количество символов, которые надо прочесть из входного файла. Функция возвращает текст в виде символьной строки. Чаще всего эту функцию используют для одновременного чтения всего текстового файла и размещения его в текстовом поле экранной формы.

Функции, используемые при обработке файлов:

· EOF (<ДескрипторФайла>) — возвращает значение True, если обнаружен конец файла, и False — в противном случае;

· LOР (<ДескрипторФайла>) — возвращает размер текстового файла в символах.

В файлах с произвольным доступом и в базах данных используются структуры данных, называемые пользовательским типом. Главное отличие этой структуры данных от ранее рассмотренных заключается в том, что она содержит отдельные данные, которые могут иметь разные типы. Такая структура данных называется записью, а отдельные компоненты этой структуры — полями записи.

Пользовательский тип данных объявляется следующим образом:

{Private| Public} Type <ИмяТипаДанных> <Элемент1> As <ТипЭлемента1>
<ЭлементN> As <ТипЭлементаN> End Type

ИмяТипаДанных — это имя, которое присваивается определяемому типу данных.

После определения пользовательского типа данных необходимо объявить переменные, которые будут иметь этот тип.

Открытие файлов произвольного доступа выполняется командой:

Open <ИмяФайла> For Random As #<Дескриптор-Файла> _Len = <ДлинаЗаписи>

В отличие от текстовых файлов здесь не делается различия между файлами для записи и файлами для чтения: все они открываются в одном режиме Random.

ДлинаЗаписи — целое число. Оно должно быть равно длине переменной пользовательского типа, которая применяется для хранения одной.записи файла.

Для включения в файл произвольного доступа новой записи используется оператор:

Put # <ДескрипторФайла>, <НомерЗаписи>, <ИмяПеременной>

НомерЗаписи — это номер (целое положительное число), который будет иметь запись, помещаемая в файл.

ИмяПеременной — это имя переменной пользовательского типа, значением которой является запись, помещаемая в файл.

Для извлечения записи из файла произвольного доступа применяется оперйтор:

Get # <ДескрипторФайла>, <НомерЗаписи>, <Имя-Переменной>

НомерЗаписи — это номер извлекаемой из файла записи..

ИмяПеременной — это имя переменной пользовательского типа, значением которой является запись, извлекаемая из файла.

Для работы как с текстовыми файлами, так и с файлами произвольного доступа можно использовать операторы:

• оператор переименования файла:

Name <СтароеИмя> As <НовоеИмя>

СтароеИмя и Новое Имя — строки, определяющие маршрут к файлу со старым именем и маршрут к этому же файлу с новым именем;

• оператор копирования файла:

FileCopy <ИмяИсходногоФайла>, <ИмяФайлаКопии>

ИмяИсходногоФайла и ИмяФайлаКопии — строки, определяющие маршрут к файлу-оригиналу и маршрут к создаваемой копии оригинала;

• оператор уничтожения файла:

Kill <ИмяУничтожаемогоФайла>

Для удобства работы с файлом его упорядочивают (сортируют), т. е. переставляют записи файла так, чтобы значения какого-нибудь поля были расположены в алфавитном порядке, а если значение поля числовое --- в порядке его возрастания или убывания. Такое поле называется ключом сортировки.

В качестве ключа сортировки можно выбрать как одно поле, так и объединение полей. Однако во многих случаях лучшим решением проблемы является введение специального поля (идентификационного номера записи). Это обычно число, которое однозначно определяет запись.

Для открытия двоичного файла применяется оператор:

Open <ИмяФайла> For Binary As # <ДескрипторФайла>

Как и в файл произвольного доступа, в двоичный файл можно помещать записи с полями различного типа. Однако этот файл может содержать записи различной длины. Поэтому при объявлении типа данных у строковых полей длина может быть не фиксирована.

Запись данных в файл происходит при помощи оператора:

Put # <ДескрипторФайла>, <НомерБайта>, <ИмяПеременной>

НомерБайта — номер байта в файле, т. е. то место в файле, куда надо поместить данные.

Чтение данных из двоичного файла осуществляется оператором:

Get # <ДескрипторФайла>, <НомерБайта>, <ИмяПеременной>

НомерБайта — номер байта в файле, т. е. то место в файле, откуда надо прочитать данные.

Найти этот номер байта бывает очень трудно. В этом заключается недостаток двоичного доступа.

ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ:

1. Работа с файлами данных.

2. Файлы последовательного доступа.

3. Запись и чтение файлов последовательного доступа.

4. Основные файловые функции. Примеры использования файлов в программировании.

 

ИСПОЛЬЗУЕМАЯ ЛИТЕРАТУРА:

1. Вирт Н. Алгоритмы и структуры данных. –М.: Мир, 2001.

2. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы. Построение и анализ. –М.: МЦНМО, 2000.

3. Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы. –М.: Вильямс, 2000.

4. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. –М.: Форум, 2008.

 


Дата добавления: 2015-07-11; просмотров: 241 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.013 сек.)