Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ посчитать запросы

Автор: ROxY 2.06.2007 15:43

программа разбивки и анализа содержимого файла отчета ПО(LOG-файла).Необходимо проанализировать и подсчитать запросы, а также вывести их в алфавитном порядке с подсчетом числа повторений. Сортировку запросов необходимо проводить по CGI-переменным S21STR и S21ALL.


var filin,filout:string;
f:text;
pod:array[1..800]of string[70];
count:array[1..800]of integer;
i,n,y:integer;

var s:string[10];
begin
assign(f,filin);
reset(f);
n:=0;y:=0;
while not eof(f) do
begin
readln(f,s);
if s=pod[n] then inc(y)
else begin
if n<>0 then count[n]:=y;
inc(n);pod[n]:=s;y:=1;
end;
end;
count[n]:=y;
close(f);
assign(f,filout);
rewrite(f);
for i:=1 to n do
writeln(f,pod[i],'-',count[i]);
close(f);
end;

var s:string[6];
t:string;
k:integer;
v:char;
begin
assign(f,filin);
reset(f);
read(f,s);
for i:=1 to n do
begin
pod[i]:='';count[i]:=0;
end;
n:=0;t:='';y:=0;
while not eof(f) do
begin
read(f,v);
if ord(v)>31 then begin
if (s<>'S21STR')and(s<>'S21ALL')
then begin
delete(s,1,1);
s:=s+v;
end
else begin
while (v<>'&')and(ord(v)>31) do
begin
if v<>'=' then t:=t+v;
read(f,v);
end;
if (n=0)and(t<>'') then begin inc(n);pod[n]:=t;count[n]:=1;end
else if t<>'' then begin
for i:=1 to n do
if pod[i]=t then begin inc(count[i]);inc(y);end;
if y=0 then begin inc(n);pod[n]:=t;count[n]:=1;end;
y:=0;
end;
s:='S21LOG';t:='';
end;
end;
end;
close(f);
for i:=1 to n do
for y:=i+1 to n do
if pod[i]>pod[y] then
begin
t:=pod[i];pod[i]:=pod[y];pod[y]:=t;
k:=count[i];count[i]:=count[y];count[y]:=k;
end;
assign(f,filout);
append(f);
for i:=1 to n do
writeln(f,pod[i],'-',count[i]);
close(f);
end;

begin
readln(filin);
readln(filout);

end.




вот но она не считает
входной файл создала...
в чем проблема??

Автор: klem4 3.06.2007 1:08

Мутновато. Приведи пример входного файла и результата который будет получен после его обработки.

Автор: ROxY 3.06.2007 11:14

я не могу запустить программку выдает ошибку...

помогите пожалуйста ну очень надо..
завтра уже сдавать...


Прикрепленные файлы
Прикрепленный файл  wslog.zip ( 45.48 килобайт ) Кол-во скачиваний: 142

Автор: Артемий 3.06.2007 13:08

Интересно,а почему у тебя переменные описываются прямо в середине кода??И в начале двa var?
Все переменные описывай под одним var в начале кода.

Добавлено через 2 мин.
Да, а переменную filin ты должна заполнить именем файла..

Автор: klem4 3.06.2007 14:38

Цитата

var s:string[10];

while not eof(f) do
begin
readln(f,s);


blink.gif

Да там длины строк не что что 10, 255 превышают ... подход изначально не верный.

Если честно я вообще слабо понимаю что надо слелать.

Например в одной из строк

S21ALL=(K=бухгалтерск$)*(K=учет$)

в другой

S21ALL=(A=пушкин$)

в третьей

S21ALL=(V=ZL)

И по какому критерию их сортировать ? Просто групировать ?