– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – &nbs……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
选择选中日期区间内的代码行
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
/*编译时间戳正则表达式样式*/
j = regcomp ( ×tamp_regular_exp
,alert_date_pattern
,REG_EXTENDED | REG_NOSUB
);
i = 0;
if (
(fgets(inputline, MAX_INPUT_LENGTH-1, input_file) == NULL)
&&
(!feof(input_file))
)
input_error = TRUE;
/* 进行输入,直到文件结尾或输入错误,或超出时间范围*/
while (!feof(input_file) && !input_error && !beyond_the_interval)
{
i++;
/* 检测代码行长度*/
if (strlen(inputline) > MAX_INPUT_LENGTH)
{
input_error = TRUE;
break;
}
/*此行是否看起来像时间戳行*/
j = regexec (×tamp_regular_exp, inputline, (size_t) 0, NULL, 0);
if (j == 0)
{
/* 获取时间戳部分行*/
j = sscanf(inputline,"%s%s%s%s%s",Day,Mon,dd,hhmmss,yyyy);
/* 指定月缩写列表中的Mon条目 */
charptr = strstr(month_abbrev,Mon);
if (charptr != 0)
{
/*计算月数据值*/
k = (int) (1+(charptr - month_abbrev)/3);
/*格式化日期字段并计算时间值 */
j = sprintf(mmddyyyy,"%.2d%.2d%s",k,atoi(dd),yyyy);
inputline_epoch = date2epoch(mmddyyyy);
/* 判断日期是否在选定范围内*/
if ( (inputline_epoch >= bgn_epoch)
&& (inputline_epoch <= end_epoch)
)
{
in_the_interval = TRUE;
/*保存新的时间戳并重置打印状态*/
/*如果不是之前的时间戳*/
if (
(previous_timestamp != NULL)
&&(strncmp(previous_timestamp,inputline,strlen(inputline)) != 0)
)
{
strncpy(previous_timestamp,inputline,strlen(inputline));
timestamp_printed = FALSE;
}
}
else if (inputline_epoch > end_epoch)
{
/*必段越界*/
beyond_the_interval = TRUE;
in_the_interval = FALSE;
break;
}
}
else
{
fprintf( stderr
,"SOFTWARE ERROR==> Can't find month %s in tablen"
,Mon
);
}
}
else if (in_the_interval)
{
/* 检测样式匹配*/
for (k=0; k< number_of_patterns; k++)
{
/* 正则表达式匹配常规*/
j = regexec ( &pattern_regular_exp[k]
,inputline
,(size_t) 0
,NULL,0
);
if (j == 0)
{
/* 正则表达式匹配 – 时间戳是否被打印?*/
if (!timestamp_printed)
{
printf("%s",previous_timestamp);
timestamp_printed = TRUE;
}
/* 打印匹配行*/
printf("%s",inputline);
break;
}
}
}
/* 我们在中断且打印所有代码行?*/
if (in_the_interval && a_flag)
{
printf("%s",inputline);
}
/*获取下一行*/
if (
(fgets(inputline, MAX_INPUT_LENGTH-1, input_file) == NULL)
&&
(!feof(input_file))
)
input_error = TRUE;
}
fclose(input_file);
/*
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
检测状态
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
switch (input_error)
{
case FALSE:
break;
case TRUE:
fprintf( stderr
,"ERROR==> Problem with input line %d; may be too longn"
,i
);
exit(1);
break;
default:
fprintf( stderr
,"ERROR==> Error at input line %dn"
,i
);
exit(1);
break;
}
exit(0);
}
/*
===================================================================== 子程序: date2epoch
=====================================================================
*/
long date2epoch(char *mmddyyyy)
{
char mm[] = "12";
char dd[] = "25";
char yyyy[] = "2001";
int n;
time_t t1;
struct tm date;
/*检测日期值的长度*/
if (strlen(mmddyyyy) != 8)
return(0);
/*检测数字*/
for (n=0;n<=7;n++)
{
if isdigit(mmddyyyy[n])
continue;
else
return(0);
}
/* 提取月,日,以及年*/
mm[0] = mmddyyyy[0];
mm[1] = mmddyyyy[1];
mm[2] = '0';
dd[0] = mmddyyyy[2];
dd[1] = mmddyyyy[3];
dd[2] = '0';
yyyy[0] = mmddyyyy[4];
yyyy[1] = mmddyyyy[5];
yyyy[2] = mmddyyyy[6];
yyyy[3] = mmddyyyy[7];
yyyy[4] = '0';
/* 填充日期结构 */
date.tm_mon = atoi(mm) - 1;
date.tm_mday = atoi(dd);
date.tm_year = atoi(yyyy);
date.tm_hour = 0;
date.tm_min = 0;
date.tm_sec = 0;
/* 检测是两位数字的年还是4位数字的年*/
if (date.tm_year > 1900)
date.tm_year -= 1900 ; /*是的,匹配4位年值*/
else if (date.tm_year < 50) /* 2000-2049 */
date.tm_year += 100;
date.tm_isdst = -1; /* 检测DST是否有效*/
t1 = mktime(&date); /* 从结构到time_t*/
return (long) t1;
}
/*
=====================================================================
子程序: epoch2date
=====================================================================
*/
int epoch2date(long epoch, char *mmddyyyy)
{
time_t CurrTime;
struct tm TestTime;
char *fmt = "%m%d%Y";
char buff[256];
CurrTime = epoch;
memcpy(&TestTime, localtime(&CurrTime), sizeof(TestTime));
strftime(buff, sizeof(buff), fmt, &TestTime);
strncpy(mmddyyyy,buff,8);
return(0);
}
/*
=====================================================================
子程序: usage
=====================================================================*/
void usage(char *cmd)
{
printf("Usage:n");
printf(cmd);
printf(usage_description);
return;
}
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。