Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_po_Pascal_2_chast.doc
Скачиваний:
107
Добавлен:
18.02.2016
Размер:
5.11 Mб
Скачать

Общие процедуры и функции для работы с файлами

Rename (<ф.п>, <новое имя>) заменяет имя файла, связанного с ф.п., на новое.

Erase (<ф.п>) уничтожает файл. Перед выполнением этой процедуры необходимо файл закрыть!

EOF (<ф.п>): Boolean — функция, тестирующая достигнут ли конец файла. Trueесли указатель стоит в конце файла. При записи это означает, что очередной компонент будет добавлен в конец файла, а при чтении — файл исчерпан.

EOLn (<ф.п>): Boolean — функция принимает значение True, когда достигнут конец строки при чтении файла.

При работе с файлами могут возникать динамические ошибки ввода/вывода. Поэтому необходимо предусмотреть обработку таких ситуаций. Для этого используют директиву компилятора {$I +/-} её смысл заключается в следующем: если директива отключена, то при возникновении динамической ошибки при попытке ввода/вывода НЕ ПРОИЗОЙДЕТ немедленного завершения программы.

Т.о., если возможна ошибка ввода/вывода, то перед выполнением операторов ввода/вывода эту директиву отключают {$I-}, а после выполнения — включают {$I+}. После включения, проверяют значение функции IOResult. Эта функция возвращает 0, если операторы ввода/вывода были выполнены успешно, и любое другое целочисленное значение, если возникли ошибки.

Замечание:

Вызов функции IOResult ОБЯЗАТЕЛЕН. Т.к. будут блокированы все дальнейшие действия до тех пор, пока она не будет вызвана.

var

FSt: file of String;

Begin

assign(FSt, 'someFile.dat');

{$I-}

reset(FSt);

{$I+}

if IoResulto<>0 then

write ('ошибка')

else

begin

writeln(fileSize(FSt));

а:='абв где ёжз';

write(FSt,s);

writeln(fileSize (FSt)) ;.'

close (FSt);

end;

End.

Процедуры и функции для работы с типизированными файлами.

Seek(<ф.п.>, <№>) устанавливает маркер считывания на элемент с заданным номером.

FilePos (<ф.п>) — функция, которая возвращает номер текущего элемента.

FileSize (<ф.п>) - функция, возвращающая текущий размер файла (количество записей).

Замечание: нумерация компонент файла начинается с нуля (0).

SeekEOF (<ф.п>): Boolean — функция, тестирующая достигнут ли конец файла. True - если указатель достиг конец файла (символ пробела и табуляции не учитывается).

SeekEOLn (<ф.п>): Boolean — функция принимает значение True, когда достигнут конец строки при чтении файла (символ пробела и табуляции не учитывается). Т.е. если в строке ещё остался пробел, то SeekEOLn(f) = True, a EOLn(f) = False.

Сортировка содержимого файлов (Внешняя сортировка)

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

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

Большинство внешних сортировок основано на слиянии частично упорядоченных вспомогательных файлов.

Слияние означает объединение 2-ух (или более) последовательностей в одну единственную упорядоченную последовательность с помощью повторяющегося выбора из доступных в данный момент элементов. Вводиться понятие серии. Серия — это упорядоченная последовательность элементов. Длина серии — количество элементов серии. Отрезок, состоящий из одного элемента, упорядочен всегда.

Суть: сначала серии распределяются на два или несколько вспомогательных файлов. Распределение серий идёт поочередно, т.е. 1-ая серия записывается в 1-ый вспомогательный файл, 2-ая — во 2-ой и т.д. После того, как произошла запись в последний файл, опять начинается запись серии 1-ый вспомогательный файл. После распределения всех серий, они объединяются в более длинные упорядоченные отрезки: из каждого вспомогательного файла берётся по одной серии, и они сливаются. Если в каком то файле серия заканчивается, то следующая пока не рассматривается. Сформированная более длинная серия записывается либо в исходный файл, либо в какой-то из вспомогательных файлов, это зависит от вида выбранной сортировки. После того, как все серии из всех вспомогательных файлов объединены в новые серии, опять начинается их распределение. Так продолжается до тех пор, пока все данные не будут упорядочены.

Простое слияние

Не обращая внимания на содержимое заданного исходного файла, его рассматривают как состоящий из серий длиной 1. Разделяя этот файл на два и, производя их слияние, получают упорядоченные пары, т.е. серии длиной 2. На следующих шагах упорядоченные пары сливаются в упорядоченные четвёрки, четвёрки сливают в восьмёрки и т.д. Весь процесс повторяется до тех пор, пока не будет упорядочен весь файл. Таким образом на k-ом каждом проходе длина серии удваивается, причём если длина исходного файла n не является степенью 2, то последняя серия будет иметь число элементов равное n-2k.

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

Условия окончания сортировки простым слиянием:

- длина серии не меньше количества элементов в файле (после фазы слияния);

- количество серий - одна (на фазе слияния).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]