/*
第2種情報処理技術者試験 平成8年度・秋期・午後 問7
BohYoh Shibata PREPARATION
*/
#include <stdio.h>
#include <string.h>
#define ADSIZE 66
#define LOGMAX 128
typedef struct { int cnt; char *urlp; } ADDR;
typedef struct { int cnt; int hour; } JI;
typedef struct { long yymmdd; int hhmm; char arec[ADSIZE]; } LOG;
void sort_addr( ADDR*, int );
void sort_ji( JI*, int );
ADDR loginf[LOGMAX];
char logbuf[LOGMAX*ADSIZE];
JI ji_t[24];
main()
{
LOG ibuf;
char *cp, sbuf[ADSIZE];
FILE *wfp;
int rcnt=0, idx= -1 , i;
for ( i=0; i<24; i++ ) {
ji_t[i].cnt = 0;
ji_t[i].hour = i;
}
wfp = fopen( "www.log", "r" );
sbuf[0] = '\0';
cp = logbuf;
while ( fscanf( wfp, "%ld %d %s\n",
&ibuf.yymmdd, &ibuf.hhmm, ibuf.arec) != EOF) {
rcnt++;
ji_t[ ibuf.hhmm / 100 ].cnt++;
if ( strcmp( sbuf, ibuf.arec ) == 0 )
loginf[idx-1].cnt++;
else {
loginf[idx].urlp = cp;
loginf[idx].cnt = 1;
strcpy( loginf[idx].urlp, ibuf.arec );
cp += (strlen( ibuf.arec )+1 );
strcpy( sbuf, ibuf.arec );
idx++;
}
}
fclose(wfp);
sort_addr( loginf, idx );
printf( " *** アクセス回数表 ***\n" );
printf( " 順位 アクセス回数 アクセス先\n" );
for( i=0; i<5; i++, idx-- ){
if ( idx == 0 ) break;
printf( " %d %6d回 %s\n", i+1, loginf[i].cnt, loginf[i].urlp );
}
sort_ji( ji_t, 24 );
printf( "\n *** アクセス時間帯表 ***\n" );
printf( " 順位 時間帯 アクセス比率\n" );
for( i=0; i<5; i++ ) {
if ( ji_t[i].cnt == 0 ) break;
printf( " %d %2d時台 %3ld%%\n",
i+1, ji_t[i].hour, ji_t[i].cnt*100L/ rcnt );
}
}