Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2014, 15:41   #1
vezunchik95
 
Регистрация: 23.05.2014
Сообщений: 6
По умолчанию Анализ log-файла

Задача была такова:

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

Программа должна выдавать отчет о своей работе в виде:

Дата Запросы
25.04.2002 - 12
26.04.2002 - 10
27.04.2002 - 5
...

Всего было сделано (запросов) - 1679

Сортировка запросов:

Бухгалтерский учет - 25
Бухгалтерский журнал - 30
Экономика Томска - 6
Экономика Якутии - 1
...

Пример файла отчета работы программы wslog.txt
Сортировку запросов необходимо проводить по CGI-переменным
S21STR=
S21ALL=

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

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


прпар.zip
vezunchik95 вне форума Ответить с цитированием
Старый 23.05.2014, 16:36   #2
vezunchik95
 
Регистрация: 23.05.2014
Сообщений: 6
По умолчанию

Не заметил тег кода Помогите, ребят, зачет горит(

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

int main()
{
    setlocale(LC_ALL, "Russian");
    
    FILE *in, *in2, *out;
    int i=-1, j, k, l, m=0, length=0, str=0, zapr=1, all_zapr=0, temp=1;
    char stroka[700], data[11]={0,}, text[700]={0}, zapros1[100]={0}, zapros2[100]={0};
    char sorting[2000][100];
    char *cgi[2];
    
    in = fopen("wslog.txt", "r");
    
    if(in == NULL)
    {
          printf("\nФайл для анализа не найден");
          system("PAUSE>>void");
          return 0;
    }
    
    out = fopen("results.txt", "w");
    fprintf(out, "  Дата           Запросы\n");
    
    fgets(stroka, 700, in);
    strncpy(data, stroka, 10);
    
    while(fgets(stroka, 700 , in) != '\0')
    {
           
           if(strncmp(data, stroka, 10) == 0)
           {
                           zapr++;
                           
           }
           else
           {
                           fprintf(out, "%s     -       %d\n", data, zapr);
                           zapr = 1;
                           strncpy(data, stroka, 10);
           }
           all_zapr++;
    }
    fprintf(out, "%s     -       %d\n", data, zapr);
    all_zapr++;
    fprintf(out, "\n\nВсего запросов - %d", all_zapr);
    fseek(in, 0, SEEK_SET);
    
    fprintf(out, "\n\n\nОтсортированные запросы:\n\n");
    
    i = -1;
    
    while ((str < (all_zapr - 1)) && (text[l] != '\0'))
    {
          l = -1;
          do
          {
                   l++;
                   text[l] = fgetc(in);
                   if(text[l] == '\n') str++;
                   
          }
          while(text[l] != '&');
          
          cgi[0] = strstr(text, "S21STR=");
          cgi[1] = strstr(text, "S21ALL=");
          
          if(cgi[0] != '\0')
          {
              i++;
              cgi[0] += 7;
              length = strcspn(cgi[0], "&\n");
              for(j=0; j<length; j++)
              {
                       sorting[i][j] = *cgi[0];
                       cgi[0]++;
              }
                       
          }
          
          if(cgi[1] != '\0')
          {
              i++;
              cgi[1] += 7;
              length = strcspn(cgi[1], "&\n");
              for(j=0; j<length; j++)
              {
                       sorting[i][j] = *cgi[1];
                       cgi[1]++;
              }
                       
          }
    }
    
    l=0;
    
    for(k=0; k<(i-1); k++)
    {
             for(l=(k+1); l<i; l++)
             {
                          if( (strcmp(sorting[k], sorting[l])) > 0)
                          {
                              strcpy(zapros1, sorting[k]);
                              strcpy(sorting[k], sorting[l]);
                              strcpy(sorting[l], zapros1);
                          }
             }
    }
    
   
    
    strcpy(zapros1, sorting[0]);
    
    for(m=1; m<(i+1); m++)
    {
             strcpy(zapros2, sorting[m]);
             
             if(strcmp(zapros1, zapros2) == 0)
             {
                    temp++;
                    strcpy(zapros1, zapros2);
             }
             else
             {
                    fprintf(out, "%s      -     %d\n", zapros1, temp);
                    temp = 1;
                    strcpy(zapros1, zapros2);
             }
    }
    fprintf(out, "%s      -     %d\n", zapros1, temp);
    
    fclose(in);
    fclose(out);
    	
    printf("\nРезультаты анализа отображены в файле results.txt...");
    printf("\nНажмите любую клавишу для завершения программы...");
    system("PAUSE>>void");	
    return 0;
}
vezunchik95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Совет по написанию парсера для log файла на Delphi kmaroff Помощь студентам 4 25.08.2012 23:43
Анализ log файла сервера apache -=koshka=- Помощь студентам 0 10.06.2012 02:21
Как считать из файла Text.LOG Алекс7 Microsoft Office Excel 13 19.07.2011 08:42
Создание log файла в сервисе nikcpp Общие вопросы Delphi 9 26.04.2011 19:49
Помогите с обработкой LOG файла Dark_KRONOS Помощь студентам 13 15.01.2010 15:19