Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 21.22.doc
Скачиваний:
2
Добавлен:
11.07.2019
Размер:
102.4 Кб
Скачать

3. Анализ текстовых файлов.

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

program volume;

{ Расчет объема файла, где цепочки пробелов учитываются как один символ}

uses CRT, DOS;

const pg=#12;

var total:pathstr;str:dirstr;fn:namestr;fr:extstr;

ft:text;alfa,beta:Boolean;

j,page:byte;a,symb:longint;author:real;

procedure setdisc;

var c:string;

begin writeln(' Установите дискету с файлом ', fn,' и нажмите enter');

readln(c);{$I-}reset(ft);{$I+}

if IOResult<>0 then begin writeln(' Файл ',fn,' не найден!');readln;halt end;

end{setdisc};

procedure checknm;

var i:byte;digit:set of '0'..'9';

begin if str <>'' then

begin for i:=1 to length(str) do if not (str[i] <>' ') then

if (str[i]='-') and (str[i+1] in digit) then str:='';

alfa:=false;

end;

end{checknm};

BEGIN page:=1;symb:=0;a:=0;alfa:=false;beta:=false;

writeln(' Введите полное имя анализируемого файла:');

readln(total);assign(ft,total);fsplit(total,str,fn,fr);

{$I-}reset(ft);{$I+} if IOResult<>0 then

begin for j:=(length(total)-length(fn)-length(fr)) downto 1 do

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

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

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

else

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;

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

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}.

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