2012-03-05 14 views
2

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個、があるかもしれませんか? Cのテキストファイル用の解析APIはありますか?

+0

これはCSVのようなファイル(つまり、 '、'のような特定の文字で区切られたフィールド)ですか?また、このファイルを生成するソースコードにアクセスできますか? –

+0

要素のリストを作成したいという意味ですか?あなたは精緻化できますか?また、単に上記のテキストファイルを読んで、特定の情報を保存することについて話しているのであれば、 'FILE'によって読み書きできます:http://www.cplusplus.com/doc/tutorial/files/ – noMAD

+0

テキストファイルには別々のブロックが含まれていますが、各ブロックの "a"の値を含む単純なリストを作成したいのですが、ファイルを解析する方法はありますか? – Nimit

答えて

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をいくつかの文字列関数とともに使用する必要があります。

+0

ありがとうございます、あなたの答えは便利です。 – Nimit

1

CでこのようなAPIがあるかどうかわかりませんが、少しコードをつけて自分でやることができると思います。

要素をブロック(a、b、c、d、e、fを文字列として、gをintとして持つ)を持つ構造体を作成します。 その構造体の配列があります。文字列配列を持っています。ファイルの最後までfreadを使用してファイルを読み込みます。構造体配列の各要素のすべての "a"要素を文字列配列に格納した後。

特定のコードが必要な場合は、説明したサンプルテキストファイルを私に渡してください。私はコードを書いてあなたのために投稿します。

+0

返信いただきありがとうございます...あなたはテキストファイルの内容として上記の2つのブロックを仮定することができます。 – Nimit

関連する問題