Основы программирования — второй семестр 08-09; Михалкович С.С.; I часть — различия между версиями
Ulysses (обсуждение | вклад) м (→Введение: после . после номера пункта списка должна быть прописная буква) |
Ulysses (обсуждение | вклад) (→Классификация файлов) |
||
Строка 10: | Строка 10: | ||
=== Классификация файлов === | === Классификация файлов === | ||
Файлы обычно классифицируют по двум признакам: | Файлы обычно классифицируют по двум признакам: | ||
− | <br>1. | + | <br>1. По '''''типу компонент''''': |
− | :*''текстовые'' | + | :*''текстовые''; |
:*''двоичные'': | :*''двоичные'': | ||
− | ::типизированные | + | ::типизированные; |
− | ::бестиповые | + | ::бестиповые. |
− | 2. | + | 2. По '''''способу доступа''''': |
− | :*''последовательный'' | + | :*''последовательный''; |
− | :*''произвольный'' | + | :*''произвольный''. |
<xh4>Текстовые файлы</xh4> | <xh4>Текстовые файлы</xh4> | ||
− | <tt>'''text'''</tt> | + | Тип <tt>'''text'''</tt>. |
+ | Состоят из строк переменной длины, в конце каждой из которых находится ''символ перехода на новую строку'' (#13#10 в Windows, #10 в Linux). В PascalABC.NET это константа <tt>NewLine</tt>. | ||
+ | <br /><br /> | ||
+ | '''Двоичные файлы''': информация хранится в виде двоичного кода. | ||
− | |||
− | |||
− | |||
− | |||
<xh4>Типизированные файлы</xh4> | <xh4>Типизированные файлы</xh4> | ||
− | <tt>'''file of''' <type></tt> | + | Тип <tt>'''file of''' <type></tt>. Содержат данные фиксированного типа <tt><type></tt>. |
− | |||
<xh4>Бестиповые файлы</xh4> | <xh4>Бестиповые файлы</xh4> | ||
− | <tt>'''file'''</tt> | + | Тип <tt>'''file'''</tt>. Могут хранить данные различных типов. |
− | + | В ''двоичных'' файлах информация хранится в том виде, как она хранится в оперативной памяти, а в ''текстовых'' числовая информация преобразуется к строковому виду и обратно, что занимает больше времени. | |
− | |||
− | |||
− | В ''двоичных'' файлах информация хранится в том виде, как она хранится в оперативной памяти, а в ''текстовых'' числовая информация преобразуется к строковому виду и обратно, что | ||
Файл называется файлом '''произвольного доступа''', если можно перейти к его i-му элементу за время, не зависящее от размеров файла, | Файл называется файлом '''произвольного доступа''', если можно перейти к его i-му элементу за время, не зависящее от размеров файла, | ||
− | <br>и файлом '''последовательного доступа''', если переход кт i-му элементу требует количество операций, | + | <br>и файлом '''последовательного доступа''', если переход кт i-му элементу требует количество операций, пропорциональное i. |
'''Замечание.''' | '''Замечание.''' | ||
Строка 45: | Строка 40: | ||
:*бестиповые файлы | :*бестиповые файлы | ||
:Типизированные файлы имеют произвольный доступ. | :Типизированные файлы имеют произвольный доступ. | ||
+ | |||
=== Понятие файловой переменной, файлового указателя === | === Понятие файловой переменной, файлового указателя === | ||
Перед тем, как работать с информацией в файле, его надо '''открыть'''. | Перед тем, как работать с информацией в файле, его надо '''открыть'''. |
Версия 21:07, 19 февраля 2009
Лекция 1
Содержание
Файлы
Введение
Файл — именованная область на диске, содержащая некоторую информацию.
Преимущества:
- Хранят данные в промежутках между запусками программ.
- Размер данных в файле может существенно превышать оперативную память компьютера.
Классификация файлов
Файлы обычно классифицируют по двум признакам:
1. По типу компонент:
- текстовые;
- двоичные:
- типизированные;
- бестиповые.
2. По способу доступа:
- последовательный;
- произвольный.
<xh4>Текстовые файлы</xh4>
Тип text.
Состоят из строк переменной длины, в конце каждой из которых находится символ перехода на новую строку (#13#10 в Windows, #10 в Linux). В PascalABC.NET это константа NewLine.
Двоичные файлы: информация хранится в виде двоичного кода.
<xh4>Типизированные файлы</xh4> Тип file of <type>. Содержат данные фиксированного типа <type>.
<xh4>Бестиповые файлы</xh4> Тип file. Могут хранить данные различных типов.
В двоичных файлах информация хранится в том виде, как она хранится в оперативной памяти, а в текстовых числовая информация преобразуется к строковому виду и обратно, что занимает больше времени.
Файл называется файлом произвольного доступа, если можно перейти к его i-му элементу за время, не зависящее от размеров файла,
и файлом последовательного доступа, если переход кт i-му элементу требует количество операций, пропорциональное i.
Замечание.
- Все файлы, содержащие элементы разного размера могут иметь только последовательный доступ к элементам. Таковыми являются:
- текстовые
- бестиповые файлы
- Типизированные файлы имеют произвольный доступ.
Понятие файловой переменной, файлового указателя
Перед тем, как работать с информацией в файле, его надо открыть.
После этого можно выполнять операции чтения из файла и записи в файл.
По окончании работы его нужно закрыть.
Закрытый файл можно:
- переименовывать
- перемещать
- копировать
- удалять
С каждым открытым файлом связан так называемый файловый указатель, который указывает на текущую позицию в файле.
Файловый указатель создается при открытии файла, и, как правило, устанавливается на 1й элемент файла.
После каждой операции чтения или записи файловый указатель продвигается вперед на размер считанных элементов.
Паскаль-программа
var f: file of integer;
begin
Assign(f, 'a.dat');
{связывает файловую переменную f с файлом на диске 'a.dat'
(файл на диске может отсутствовать)}
//файл состоит из элементов (1, 2, 3)
Reset(f); //файловый указатель — на элемент "1"
var x: integer;
read(f, x); //x = 1
//файловый указатель — на элемент "2"
write(f, x + 4, 666); //теперь файл состоит из элементов (1, 5, 666)
//файловый указатель — за концом файла
{выполнить read(f, x) НЕЛЬЗЯ, т.к. произойдет
ошибка времени выполнения
"чтение за концом файла"}
write(f, 777); //можно
Close(f);
end.
<xh4>2 способа открытия файла</xh4>
- Reset(f) — открытие текстового файла на чтение, а двоичного — на чтение и запись;
файл должен существовать;
файловый указатель — на начало файла; - Rewrite(f) — создание нового файла (если такого файла не существовало) или обнуление существующего;
файловый указатель — в начало;
текстовые файлы при этом открываются только на запись, а двоичные — на чтение и запись;
Функция Eof(f) [расшифровывается как End Of File] возвращает true, если файловый указатель находился за концом файла.
После работы с данными в файле его необходимо закрыть с помощью Close(f).
Если, не закрывая, выполнить Reset(f), то файловый указатель просто перейдет к началу.
Буферизация в файлах
С каждым файлом связан некий буфер памяти, в который информация из файла частично считывается, и, из которого записывается в нужную часть файла.
Наличие буфера ускоряет операции чтения и записи, поскольку они выполняются преимущественно не с внешним устройством (файлом), а с участком оперативной памяти.
Если забыть закрыть файл, открытый на запись, то можно потерять лишь данные, сохраненные в буфере.
Подпрограммы для работы с закрытыми файлами
procedure Rename(f, name); //переименовывает файл, связанyый с файловой переменной f, давая ему имя name procedure Erase(f); //удаляет файл, связанный с файловой переменной f
function FileExists(name): boolean; //возвращает True, если файл с именем name существует function DeleteFile(name): boolean; //удаляет файл. Если файл не может быть удален, то возвращает False function RemoveDir(name): boolean; //удаляет каталог. Возвращает True, если каталог успешно удален function GetCurrentDir: string; //возвращает текущий каталог function SetCurrentDir(name): boolean; //устанавивает текущий каталог. Возвращает True, если каталог успешно установлен function CreateDir(name): boolean; //создает каталог. Возвращает True, если каталог успешно создан function ExtractFileName(name): string; //выделяет имя файла из полного имени файла name function ExtractFileExt(name): string; //выделяет расширение из полного имени файла name function ExtractFilePath(name): string; //выделяет путь из полного имени файла name
Ошибки ввода-вывода при работе с файлами
(самые распространенные)
- файл открыли, но забыли выполнить Assign
- открыли, но файла нет на диске (или нет прав доступа на чтение)
- попытка считывания за концом файла
Все эти ошибки нужно обрабатывать с помощью исключений.
Пример 1. Файл не существует.
Assign(f, 'a.dat');
try
Reset(f);
read(f, x);
Close(f);
except
writeln('Файл не существует');
end;
<xh4>Оператор try..finally</xh4>
try <действия, которые могут вызвать исключение> finally <действия, которые надо выполнить независимо от того, произошло исключение, или нет> end;
Этот оператор отличается тем, что не обрабатывает исключение, а лишь делает финальное действие в любом случае.
Для обработки нужен внешний блок try..except.
Пример 2. Попытка считывания за концом файла.
Assign(f, 'a.dat');
try
Reset(f);
try
read(f, x);
finally
Close(f);
end;
except
writeln('Произошла ошибка ввода-вывода');
end;
Лекция 2 <xh4></xh4>
Пример. Проверка файла на существование.
===Подпрограммы для работы с типизированными файлами
Truncate FileSize FilePos Seek
Варианты использования:
Seek(FileSize(f)) - переместить файловый указатель за конец файла (Eof(f)=True) Seek(FilePos(f)-1) - вернуться на 1 позицию назад
Пример 1. Добавление 0 в конец файла
Пример 2. Возведение всех элементов файла в квадрат.
Пример 3. Использование в базах данных - перевод Иванова в 10 группу в виде наказания
Пример 4. Сортировка файла
for var i:=FileSize(f)-1 downto 1 do
for var j:=0 to i-1 do
begin
Seek(f,j);
read(f,x,y);
if x>y then
begin
Seek(f,j);
write(f,y,x);
end;
end;