Разбор определенных отформатированных файлов в C - PullRequest
2 голосов
/ 05 марта 2012

Я хочу проанализировать текстовый файл в 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» элементов каждого блока), для чего мне делать? Есть ли API разбора для текстового файла в C?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Я не знаю, есть ли такой API или нет в C. Но я думаю, что вы можете сделать это самостоятельно с небольшим количеством кода.

создать структуру, имеющую элементы в виде блока (имеющие a, b, c, d, e, f в виде строки и g в виде int).Есть массив этой структуры.И есть массив строк.Прочитайте файл, используя fread до конца файла.После сохраните все элементы «a» каждого элемента массива struct в строковом массиве.

Если вам нужен конкретный код, дайте мне пример текстового файла, который вы описали.Я напишу код и пост для вас.

0 голосов
/ 05 марта 2012
#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 с некоторыми строковыми функциями.

...