【发布时间】:2017-01-05 21:47:02
【问题描述】:
我有一个变量,我在其中读取了一个 .txt 文件。该文件如下所示:
Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast
现在我想做的是,获取每个 'Element1' 并检查它是否等于特定字符串。
我阅读了很多关于函数 strtok() 的内容并尝试使用它。
这是我的函数:(id是这个特殊的字符串,我在函数中转换它。)
int PLUexists(int id) {
char idc[3];
sprintf(idc, "%d", id);
printf("%s", idc);
/* My Main String */
FILE *plu = fopen("kassa_plu.txt", "r");
char pluc[2000];
while( fgets(pluc, sizeof(pluc), plu) !=0 );
/* My Token */
char *token;
/* get first line */
token = strtok(pluc, "#");
while( token != NULL ) {
printf(" %s \n", token);
// Without that block, I get all lines seperated...
char t[255];
strcpy(t, token);
if ( strcmp(strtok(t, "|"), idc) == 0) {
printf("Jep");
return 1;
}
// End 'block'
token = strtok(NULL, "#");
}
return 0;
}
现在,如果我只是打印出第一个标记(并重复它),我的所有行都会分开(见下文),但是当我还解析 printf(" %s \n", token); 和 token = strtok(NULL, "#"); 之间的代码时,它将不起作用.
无块:
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
有了它:
Element1|Element2|Element3|...|ElementLast
Element2|Element3|...|ElementLast
Element3|...|ElementLast
...|ElementLast
ElementLast
【问题讨论】:
-
您可以查找
strtok_r,这将允许您嵌套“strtok 循环”。 -
while( fgets(pluc, sizeof(pluc), plu) !=0 );将快速到达 EOF,那里的分号不做任何事情。去掉之后,下面的代码块是不是需要{ braces }围起来? -
为什么要使用 strtok -- strstr 不是很好吗?
-
你是对的循环,@WeatherVane,但也许 OP 想要 只处理他文件的最后一行。如果是这样,并且如果可以依赖文件不完全为空,那么这是一个不错的方法。
标签: c arrays file token strtok