用逗号分隔的数据的C解析器

时间:2012-05-25 18:01:47

标签: c parsing

使用以下格式在C中为数据编写解析器的最有效方法是什么:

  

ATR#1,#ATR 2,...,ATR#N

     

BTR#1,#BTR 2,...,BTR#N

     

...

每条记录都在新行中,属性用逗号分隔。

应该使用什么功能?你有什么例子吗?

3 个答案:

答案 0 :(得分:2)

下面是一些示例代码,它将逐行读取由换行符分隔的文件,然后拆分参数并将其打印出来(例如,您可以轻松地将其调整为{{1}数组的数组} S):

char *

答案 1 :(得分:0)

为工作选择合适的工具。它是Perl,Python中的一行,或者最好的awk。如果你有令人信服的理由使用C,请在你的帖子中解释 - 否则我认为任何人都可以给你的最明智的答案是建议你选择合适的工具来代替工作,而不是问如何用一种语言做一些繁重的事情那是不好的。

从命令行:

tr ',' '\n' < file.txt

将逗号变为新行。

答案 2 :(得分:0)

这将有效:

/* You need the following includes and defines */
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#define NULL_CHAR 0x0

int parse(char* data) {
    const int LINE_SIZE=255; /* Should be long enough for your unparsed data */
    const int MAX_FIELDS=99; /* Maximum number of fields */
    char  output[MAX_FIELDS][LINE_SIZE];
    int   i;
    int   output_field_count;
    int   output_char_idx;

    for (i = 0; i < MAX_FIELDS; i++) {
        strcpy(output[i], "");
    }
    output_field_count = 0;
    output_char_idx    = 0;

    for (i = 0; i < LINE_SIZE; i++) {
        if ((data[i] != ',')  && 
            (output_field_count    < MAX_FIELDS) && 
            ((output_char_idx+1) < LINE_SIZE)) {

            output[output_field_count][output_char_idx]   = data[i];
            output[output_field_count][output_char_idx+1] = NULL_CHAR;
            output_char_idx++;
        }
        else if (data[i] == ',') {
            output_field_count++;
            output_char_idx = 0;
        }
    }
    output_field_count++;
    output_char_idx = 0;

    printf("OUTPUT FIELD COUNT IS: %d\n", output_field_count);
    for (i = 0; i < output_field_count; i++) {
        printf("FIELD %i IS: %s\n", i, output[i]);
    }
    return 0;
}

可以这样调用:

char data[500]; /* Should be long enough for your unparsed data */
strcpy(data, "atr#1,atr#2,...,atr#n");
parse(data);
strcpy(data, "btr#1,btr#2,...,btr#n");
parse(data);