【发布时间】:2016-01-04 20:02:35
【问题描述】:
我有一个问题,我需要从日志文件中读取行,检查该行是否包含单词“fail”,如果是,则输出从午夜到发生错误的时间经过了多少秒。
日志文件中的示例行如下所示:
Aug 20 10:20:57 kernel: ata3: SATA link down
我的问题的前两部分工作正常(从日志文件中读取行并检查它们是否包含单词“fail”),但我对如何从日志文件中提取时间并转换它有点困惑自午夜以来经过的秒数。
到目前为止我所拥有的看起来像这样(代码的相关部分):
do
{
currLine = fgets(buff, sizeof(buff), inFile);
if(strstr(currLine, "fail") != NULL)
{
/*convert the time into seconds since midnight and output it*/
}
} while(!feof(inFile));
到目前为止,我只能想出一个关于如何实现它的想法,但它不起作用(这将在上面的 if 语句中,我在其中放置了占位符注释来解释它需要做什么做):
int hr, min, sec, timePassed;
fscanf(currLine, "%d:%d:%d", &hr, &min, &sec);
timePassed = hr * 3600 + min * 60 + sec;
提前非常感谢
【问题讨论】:
-
欢迎来到 Stack Overflow!请看Why is “while ( !feof (file) )” always wrong?
-
看看你的实现是否提供了
strptime()函数。 (stackoverflow.com/a/11213640/694576) -
你的 fscanf 应该是一个 sscanf。
-
建议
if (3 == sscanf(currLine, "%*3c %*d %d:%d:%d", &hr, &min, &sec)) ...