2016-09-10 2 views
-3

У меня есть файл со следующей строкой:Разбор строки из файла

  numOfItems =   100 

Я хочу, чтобы прочитать строку из файла и инициализировать атрибут «numOfItems» 100. Как я мог это сделать, т.е. удаление ненужных пробелов и чтение только тех значений, которые мне нужны?

Кроме того, у меня есть другая линия, которая:

num Of Items = 100 

, которые мне нужно разобрать, как ошибка (атрибуты и значения не могут содержать пробелы).

В первом случае я знаю, как удалить пробелы в начале, но не промежуточные пробелы. Во втором случае я не знаю, что делать.

Я думал использовать strtok, но не смог получить то, что мне было нужно.

Пожалуйста, помогите, спасибо!

+0

писать или поиск функций, которые: поиск одного заданного символа. Разделите строку в заданной позиции. Удалите пробелы в начале и в конце строки. Объединитесь значимым образом. Сначала попробуйте вывести строковые литералы. О, а также функция для чтения одной строки из файла. –

+0

@ user3121023, я пробовал это, но потом я подумал о следующем примере: 'numOfImages Images = 100', но эта строка является незаконной. Что мне делать в этом случае? – Galc127

+0

@ user3121023, что относительно 'numOfImages = 1 00'? Это незаконно, и 'sscanf' возвращает 2 ... – Galc127

ответ

1

Используя fgets и sscanf с% S% D и% п следует разобрать строки формата «пункт = значение»

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

int main(void){ 
    char line[256] = { '\0'}; 
    char item[50] = { '\0'}; 
    int value = 0; 
    int used = 0; 

    printf ("enter string as \"item = value\" or x to exit\n"); 
    while ((fgets (line, 256, stdin))) { 
     if (strcmp (line, "x\n") == 0) { 
      break; 
     } 
     //%49s to prevent too many characters in item[50] 
     //%n will report the number of characters processed by the scan 
     //line[used] == '\n' will succeed if the integer is followed by a newline 
     if (((sscanf (line, "%49s = %d%n", item, &value, &used)) == 2) && line[used] == '\n') { 
      printf ("parsed item \"%s\" value \"%d\"\n", item, value); 
     } 
     else { 
      printf ("problem parsing \n\t%s\n", line); 
     } 
     printf ("enter string as \"item = value\" or x to exit\n"); 
    } 

    return 0; 
} 
+0

Это замечательно, спасибо большое! – Galc127

Смежные вопросы