当您从C中读取文件时如何标记化?
文本文件:
PES 2009; Konami; DVD 3; 500.25; 6
Assasins Creed; Ubisoft; DVD; 598.25; 3
Inferno; EA; DVD 2; 650.25; 7
char *tokenPtr;
fileT = fopen("DATA2.txt", "r"); /* this will not work */
tokenPtr = strtok(fileT, ";");
while(tokenPtr != NULL ) {
printf("%s\n", tokenPtr);
tokenPtr = strtok(NULL, ";");
}
希望打印出来:
PES 2009
小浪
答案 0 :(得分:1)
试试这个:
main()
{
FILE *f;
char s1[200],*p;
f = fopen("yourfile.txt", "r");
while (fgets(s1, 200, f))
{
while (fgets(s1, 200, f))
{
p=strtok(s1, ";\n");
do
{
printf ("%s\n",p);
}
while(p=strtok(NULL,";\n"));
}
}
200个字符大小只是一个例子
答案 1 :(得分:0)
您必须将文件内容读入缓冲区,例如使用fgets
或类似的一行一行。然后使用strtok
来标记缓冲区;阅读下一行,重复直至EOF。
答案 2 :(得分:0)
strtok()
接受char *
和const char *
作为参数。您传递的是FILE *
和const char *
(隐式转化后)。
您需要从文件中读取一个字符串并将该字符串传递给该函数。
Pseducode:
fopen();
while (fgets()) {
strtok();
/* Your program does not need to tokenize any further,
* but you could now begin another loop */
//do {
process_token();
//} while (strtok(NULL, ...) != NULL);
}
答案 3 :(得分:0)
使用strtok是一个BUG。尝试strpbrk(3)/ strsep(3)或strspn(3)/ strcspn(3)。