2014-12-15 3 views
1

Я пытаюсь сделать программу, чтобы прочитать некоторые данные из .dat файла, а просто распечатать его на мою консольC Игнорирование нескольких строк, а затем распечатать остальные линии

файл .dat выглядит следующим образом:

# Channel A: 
# Channel A: 
# Channel B: 
# Channel B: 
# time_in_sec channelA_value channelB_value 
1377505127.976349 
1377505128.976567 GW.Inc,GDM-8246,FW1.00 
1377505129.476435 DCA 
1377505129.976502 -00000. 
1377505130.476462 -00000. 
1377505130.976538 -00000. 
1377505131.476524 -00000. 
1377505131.976527 -00000. 
1377505132.476526 -00000. 

Я хочу читать и печатать строки после DCA , но я не знаю, как начать чтение/печать после этой строки.

+0

Parsing не является самой сильной стороной C. Я предлагаю использовать другие инструменты (sed, grep и т. Д.) Для этого и передавать различные данные в вашу программу, чтобы избежать многих головных болей, если вы абсолютно не должны придерживаться простой C. – KBart

+1

вопрос кажется вне темы, потому что он не показывает никаких собственных усилий. – lpapp

ответ

3

Ну, вы можете следовать подсказкам ниже:

  1. прочитанных строк по одному с помощью fgets().
  2. проверить наличие подстроки "DCA" с использованием strstr().

Затем

  • если он найден, продолжить fgets() и от следующей итерации, используйте printf() для печати на выходе.
  • если не найден, продолжайте использовать fgets().

Примечание: при использовании fgets(), вам необходимо позаботиться о возможном \n в конце самостоятельно.

0

Вам нужно сделать это с помощью C? Если вы просто хотите Ignoring some lines, and then print the rest of the lines, попробуйте другие инструменты, которые могут выполнять эту работу более удобным способом. С sed:

sed -nre '/^.*DCA *$/,$ {/^.*DCA *$/!p}' yourfile 

Если вы хотите записать его в C, хорошо, оставьте этот ответ в одиночку.

0

Что-то, как это должно работать:

char buf[1000]; 
/* skip lines until DCA */ 
while(fgets(buf, 1000, f) && strcmp(buf + strlen(buf) - 5, " DCA\n")); 
/* print all the rest */ 
while(fgets(buf, 1000, f)) 
    fputs(buf, stdout); 

Если программа должна обрабатывать стиль строки Windows/Mac заканчивается корректировка будет необходимо. Также, если допустимы пробелы после «DCA».

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

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