从文本文件中标记,读入C中的数组

时间:2009-12-01 10:40:39

标签: c text file tokenize

当您从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

小浪

4 个答案:

答案 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)。