парсинг текстового файла с определенным соответствием ключевого слова - PullRequest
1 голос
/ 02 марта 2012

Мне нужно создать поисковую программу на языке Си, которая может анализировать текстовый файл и находить ключевое слово x = "value". Затем я хочу создать список элементов значения в массив. В настоящее время я использую подход fscanf, вот мой фрагмент кода.



    fscanf(fp, "%s", buf);
    if !strcmp(buf, "x")
    {
       fscanf(fp, "%s", buf);
        if ( ! strcmp(buf, "="))
         fscanf(fp, "%s", buf);
        else
        printf("\n Not a valid format");
    }

Я не хочу использовать fscanf, есть ли другой подход для моего требования?
Спасибо.

1 Ответ

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

Существуют и другие подходы (например, вы могли бы использовать Flex), но я думаю, что несколько лучше было бы использовать sscanf:

char buffer[256];
char value[128];

fgets(buffer, sizeof(buffer), fp);

if (1==sscanf(buffer, "x=%127s", value))
     // we read a value -- now use it however needed.

Редактировать: основная идея здесь довольно проста,Мы начинаем с чтения целого, как с fgets.Затем мы используем sscanf, чтобы попытаться сопоставить x=<whatever> в этой строке.Если мы найдем это, у нас будет ценность, о которой мы заботимся.Если мы не нашли его, sscanf вернет 0, так как он возвращает количество преобразованных элементов - и если он не соответствует указанному x=, он ничего не преобразует, поэтому sscanf вернет 0и мы знаем, что эта строка не совпадает.

Редактировать 2: Вот небольшая демонстрационная программа, которая считывает данные из файла и распечатывает значения для строк, следующих за формой x=<whatever>, с разрешенными пробеламидо и после x и =:

#include <stdio.h>

int main() { 

    FILE *infile = fopen("Somefile.txt", "r");

    char buffer[256];
    char value[128];

    while (fgets(buffer, sizeof(buffer), infile))
        if (1 == sscanf(buffer, " x = %127s", value))
            printf("Value = %s\n", value);
    return 0;
}

Я проверил это с помощью ввода:

some junk
#a comment
a = 1 ; a couple other variables.
b = 2
x = 3
 x = 4
x=5

Результат, который я получил:

Value = 3
Value = 4
Value = 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...