读取文本文件中的特定字符串,并将字符串转换为int C.

时间:2013-12-16 00:10:35

标签: c file

我有一个txt文件,我用这个函数读取它的每一行: txt文件就像这样

  

NOMLOT:300个
  0001 :: 16:27 :: 47 :: 68:79:3 :::: 43:53 :: 71:81 :: 17:28:31 :: 59 ::: 85
  0002:15 :: 32 :: 8 :: 74:79 :: 3 :::: 43:53 :: 71:81 :: 17:28:31 :: 59 ::: 85

我的get_line函数在这里

char *get_line(char *buf, int n, FILE *f, int line)
{
    int i;
    for (i=0 ;i<line;i++)
    {
        if(fgets(buf,n,f) == NULL)
            return NULL;
        buf[strlen(buf) - 1 ] = '\0';
    }
    return buf;
}

例如,如果我想打印第一行,它将如下所示:

char input[60];
get_line(input,TAILLE,fichier,ligne);
printf("1st line: \n");
for (i=0;i<60;i++)
{
    printf("%c",input[i]);
}

我想要做的是,只读取300并将300转换为INT并保存,所以使用此值我可以循环我的程序从第二行开始读取所有现有行。

2 个答案:

答案 0 :(得分:1)

好的,首先是评论。如果您按顺序读取文件(例如,读取第1行,然后读取第2行,然后读取第3行),则get_line()函数的效率将非常低,因为您必须执行O(n ^ 2)行读取读n行。您应该找到一种方法来构建程序,以便您最多一次读取每一行。

至于实际问题,您熟悉C函数strtokatoi吗?

假设您的input缓冲区包含您想要的行(正则表达式"[^:]*:\d+",例如“NOMLOT:300”),您可以执行以下操作:

const char * num_pos = strtok(input, ":"); // get the position of the colon
if (! num_pos)
    ; // colon not found, so handle error
else
    {
    int num = atoi(num_pos + 1); // convert the string starting one char past the colon to an integer
    // do processing now that you have the number...
    }

答案 1 :(得分:1)

    get_line(input,TAILLE,fichier,ligne);
    printf("1st line: \n");
    for (i=0;i<60 && input[i];i++){
        printf("%c",input[i]);
    }
    int num;
    if(1==sscanf(input, "NOMLOT:%d", &num)){
        printf("\n%d\n", num);
    }