簡體   English   中英

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

[英]Parsing specific formatted files in C

我想在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?

我不知道C中是否有這樣的API。但是我認為您可以自己編寫一些代碼。

創建一個以元素為塊的結構(a,b,c,d,e,f為字符串,g為int)。 具有該結構的數組。 並有一個字符串數組。 使用fread讀取文件,直到文件結尾。 之后,將struct數組的每個元素的所有“ a”元素存儲在字符串數組中。

如果您需要特定的代碼,請給我您描述的示例文本文件。 我將編寫代碼並為您發布。

#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與某些字符串函數一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM