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

1)手动编写解析器。我假设您要么将整个文件保存在内存中,要么至少保存整行。在这种情况下, strtok() 对于简单的解析操作来说已经足够好了。应该很容易。

2) 使用lex 和 yacc(或 flex 和 bison)为您生成解析器。您可能只需要 (f)lex。

于 2012-06-04T05:48:38.720 回答
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

您可以使用 strtok() 函数通过将“”转换为键并制作条件代码以使用其中的表达式(字符串)来实现进一步的目的。

于 2012-06-04T07:30:24.200 回答