如何正确解析文本文件?

时间:2015-03-10 18:32:38

标签: c file parsing pointers printing

我有一个文本文件,其中包含我编写的程序中的一堆随机数据:

hdfs45 //the hdsf part stays the same everytime, but the number always changes

我正在尝试将这一行数据解析为两部分,hdfs部分和45部分(稍后将转换为int)

我尝试过这样的事情:

Char * a, * b;
char str[100];
FILE* ptr;

ptr = fopen("test.txt","r"); // opens sucessfully

while(fgets(str,100,file))
{
    a = strtok(str," \n");
    printf("%s",a); // but this prints the whole string

}

数据将是随机的,将分隔符设置为“45”是没用的。然而,第一部分“hdfs”始终是相同的,任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:0)

您无法使用strtok因为没有任何标记(您无法使用分隔符),请尝试:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char str[100] = "hdfs45";
    char *ptr;
    long num;

    ptr = strpbrk(str, "012345679");
    if (ptr) {
        num = strtol(ptr, NULL, 10);
        *ptr = '\0';
        printf("%s -> %ld\n", str, num);
    }
    return 0;
}

答案 1 :(得分:0)

如果“hdfs”永远不会改变,那么你可以简单地将前4位后的字符转换为数字,即:

int num = atoi(str + 4);
str[4] = '\0';

在您的示例中,num将等于45,而str将等于hdfs