If beta and not (str[j] in [pg,' ']) then

Else

If not (total[j] in ['a','A','b','B']) then

If total[j] in ['A'..'Z','a'..'z'] then

begin writeln(' Файл ',fn,' не найден');readln;halt end

begin setdisc;break end;

end;

repeat readln(ft,str); if str<>'' then

begin symb:=symb+length(str); for j:=1 to length(str) do

begin if alfa then checknm;

if str[j]=pg then begin page:=page+1;alfa:=true end;

if not (str[j] in [pg,' ']) and (not alfa) then inc(a);

if str[j]=' ' then beta:=true;

begin inc(a);beta:=false end;

end;

end;

until eof(ft);

author:=a/40000; clrscr;gotoXY(10,10);

write(' ОБЪЕМ ТЕКСТА ',fn);gotoXY(10,11);

write(' Страниц: ',page);gotoXY(10,12);

write(' Всего символов в тексте: ',symb);gotoXY(10,13);

write(' Объем в авторских листах: ',author:2:3);

gotoXY(10,14); for j:=20 to 80 do write('_');writeln; readln;

END {volume}.

4. Сортировка текстовых файлов.

Сортировка файлов - весьма распространенная процедура, направленная на повышение эффективности многих важных процессов обработки файлов. По сути, сортировка - ключевая процедура для всего цикла обработки. Методы сортировки и их алгоритмизация достаточно хорошо изучены и описаны. Не имея возможности сколько-нибудь детально осветить здесь эту проблему, остановимся лишь на одном распространенном методе сортировки - методе "трёх лент" (названном ещё в старые и добрые времена, когда ленты были распространенным видом внешних носителей).

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

Пусть требуется сортировать по возрастанию записей файл F, состоящий из последовательности записей-чисел R1,R2,...Rn, где n - число записей. Чтобы сформулировать эффективный критерий "разделения" файла, введём понятие:

Отрезок монотонности файла - это последовательность записей Ri,Ri+1, Ri+2,... Ri+m файла, удовлетворяющая условию:

Ri <= Ri+1<= Ri+2 <=..Ri+m и Ri-1>Ri, если i>1; Ri+m>Ri+m+1, если i+m<n.

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

Для " разделения " заданного файла F на два файла F1 и F2 используем следующий критерий: при последовательном просмотре файла F отрезки монотонности с нечётными номерами Q1,Q3,... записываются в F1, а с чётными номерами Q2,Q4,... - в F2.

" Слиянием " файлов F1 и F2 в файл F назовем процесс записи в F следующей последовательности компонентов F1 и F2:

1) минимальный из первых компонентов F1 и F2;

2) минимальный из оставшегося незаписанным компонента предыдущего шага (сохранённого в буфере) и очередного прочитанного компонента из того файла, компонента которого была записана на предыдущем шаге.

3) если буфер пуст, то записи подлежит каждый прочитанный компонент в оставшейся части файла F1 или F2.

Каждый цикл "разделение-слияние" будет уменьшать количество отрезков монотонности в два раза, так как каждая пара отрезков (отрезок из F1 и отрезок из F2) будет слита в один отрезок в F. Таким образом, процесс сходится к состоянию, содержащему один отрезок монотонности (т.е. к отсортированному файлу F) не более чем за log2 (t) циклов "разделение-слияние".

Ниже приводится процедура сортировки текстового файла, реализующая описанный выше метод "трёх лент", оформленная в виде модуля Турбо Паскаля s_text и пример её использования - сортировка текстового файла по страницам:

UNIT s_text; {Модуль-процедура sort_file}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: