我有如下访问日志:
[Thu Oct 4 00:20:05.140 2018] 0.017 sec 0.017 sec [ext2/0/rel 53798 (0,10)] [question_description] @products_description"find ea"/1
我需要阅读日期时间[2018年10月4日星期四00:20:05.140]和“ find ea”之间的字符串。
我的代码:
int main(void) {
char buffer[10000];
int count = 0;
char datetime[35];
FILE* fptr;
fptr = fopen("query.log", "r");
while (count < 10) {
if (!fgets(buffer, sizeof buffer, fptr)) break;
sscanf(buffer,"%[^\n]", datetime);
printf("date : %s", datetime);
count++;
printf("\n");
}
return 0;
}
我需要更新sscanf
的表达式,以便获取日期时间和字符串“ xxxx”
答案 0 :(得分:1)
您可以使用strtok获取所需的字符串,这是我的解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char * tok;
char buffer[10000];
int count = 0;
char datetime[35];
char qdescription[35];
char pdescription[35];
FILE* fptr;
if(!(fptr = fopen("query.log", "r")))
{
perror("No file\n");
fclose(fptr);
return -1;
}
while(fgets(buffer, sizeof(buffer), fptr))
{
for(tok = strtok(buffer, "[]"); tok != NULL; tok = strtok(NULL, "[]"), count++)
{
switch(count)
{
case 0: strcpy(datetime, tok);
case 4: strcpy(qdescription, tok);
case 5: strcpy(pdescription, tok);
}
}
}
printf("%s\n%s\n%s\n", datetime, qdescription, pdescription);
return 0;
}
使用此代码,您可以检索日期和question_description
,但我无法隔离出最后一个product_description
,看看是否可以找到解决此问题的方法。