在C中解析特定格式的文件

时间:2012-03-05 05:46:46

标签: c parsing io

我想解析C程序中的文本文件。该文件包含可能的数据:

block1=
{
    a="some text with space and double quota"    
    b=random text    
    c=random text    
    d=random text    
    e=random text    
    f="number"    
    g=number    
}

block2=
    {
        a="some text with space and double quota"    
        b=random text    
        c=random text    
        d=random text    
        e=random text    
        f="number"    
        g=number    
    }

可能有n个块,我想创建元素列表(每个块的“a”元素),为此我该怎么办? C中的文本文件是否有任何解析API?

2 个答案:

答案 0 :(得分:1)

我不知道C中是否有这样的API。但我认为你可以用很少的代码自己做。

创建一个结构,其中元素作为块(具有a,b,c,d,e,f,作为字符串,g作为int)。 有一个该结构的数组。并有一个字符串数组。使用fread直到文件末尾读取文件。在字符串数组中存储struct数组的每个元素的所有“a”元素之后。

如果您需要特定代码,请给我一个您描述的示例文本文件。我会写代码并为你发帖。

答案 1 :(得分:0)

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

typedef struct block {
    char head[8];
    char braze[2];
    char a[46];
    char b[18];
    char c[18];
    char d[18];
    char e[18];
    char f[15];
    char g[13];
    char close_braze[2];
} block;

int main () {
    int i, ret;
    char a_elm[10][50];
    FILE *fp;
    block blk[10]; //use a specific number if you know. or go for linked list

    fp = fopen ("one.txt","r");

    for (i = 0; i < 11; i++) {
        ret = fread ((void *) &blk[i], sizeof (block), 1, fp);
        if (!ret)
            break;
    }
    fclose (fp);    

    for (ret = i, i = 0; i < ret; i++) {
        strncpy (a_elm[i], blk[i].a, 46);
        a_elm[i][46] = '\0';
        printf ("%s\n", a_elm[i]);
    }

    return 0;
}

对于固定格式代码,可以像上面一样使用fread,或者你必须使用fscanf和一些字符串函数。