IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> посчитать запросы
ROxY
сообщение 2.06.2007 11:43
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Женский

Репутация: -  0  +


программа разбивки и анализа содержимого файла отчета ПО(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.

 


вот но она не считает
входной файл создала...
в чем проблема??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 2.06.2007 21:08
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ROxY
сообщение 3.06.2007 7:14
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Женский

Репутация: -  0  +


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

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


Прикрепленные файлы
Прикрепленный файл  wslog.zip ( 45.48 килобайт ) Кол-во скачиваний: 107
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 3.06.2007 9:08
Сообщение #4


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


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

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


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 3.06.2007 10:38
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата

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)

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 23.07.2025 3:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"