0

ファイルから二重引用符で囲まれた文字列を読み取って保存するには、C プログラムが必要です。ファイルは修正されていません。つまり、変更されている可能性がありますが、次のようなデータが含まれています。

MY_NAME( tra_ctrl_1, "T_aa1")
MY_NAME( tra_ctrl_2, "A_bb1")
MY_NAME( tra_ctrl_3, "C_x")
MY_NAME( tra_ctrl_4, "M_cc1")
MY_NAME( tra_ctrl_5, "xx")
MY_NAME( tra_ctrl_6, "yy")
............ and so on..

ファイルの行を読み取った後、T_aa1、A_bb1、C_x、M_cc1、xx、およびyyを保存したい。

4

5 に答える 5

2

正規表現を使用できます。

于 2012-06-04T05:43:24.587 に答える
1

scanfによる簡単な方法のみ

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


int main() {
    FILE *fp;
    char buff[1024];
    char str[128];

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

    while (NULL!=fgets(buff, sizeof(buff), fp)){
        sscanf(buff, "%*[^\"]%*c%[^\"]%*c%*[^\n]%*c", str);
        printf("%s\n", str);
    }
    fclose(fp);
    return 0;
}
/*
T_aa1
A_bb1
C_x
M_cc1
xx
yy
*/
于 2012-06-04T09:20:11.613 に答える
0

strtok() 関数を使用して " " をキーに変換し、その中の式 (文字列) をさらなる目的で使用する条件付きコードを作成することで、それを使用できます。

于 2012-06-04T07:30:24.200 に答える
0

strchrによる簡単な方法のみ

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


int main() {
    FILE *fp;
    char buff[1024];
    char str[128];

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

    while (NULL!=fgets(buff, sizeof(buff), fp)){
        char *pf,*pb;
        int len;
        pf=strchr(buff, '\"');
        pb=strchr(pf+1, '\"');
        len = pb - pf - 1;
        memcpy(str, pf + 1, len);
        str[len]='\0';
        printf("%s\n", str);
    }
    fclose(fp);
    return 0;
}
于 2012-06-04T09:35:38.813 に答える
0

1) パーサーを手動で作成します。ファイル全体がメモリ内にあるか、少なくとも行全体があると想定しています。その場合、単純な解析操作には strtok() で十分です。十分に簡単なはずです。

2) lex と yacc (または flex と bison) を使用して、パーサーを生成します。おそらく必要なのは (f)lex だけです。

于 2012-06-04T05:48:38.720 に答える