2014-10-15 2 views
-3

У меня есть следующий документ:чтение документа и найти конкретное слово в этом документе

WTPZ24 KNHC 032040 
TCMEP4 

TROPICAL STORM SIMON FORECAST/ADVISORY NUMBER 9 
NWS NATIONAL HURRICANE CENTER MIAMI FL  EP192014 
2100 UTC FRI OCT 03 2014 

THERE ARE NO COASTAL WATCHES OR WARNINGS IN EFFECT. 

TROPICAL STORM CENTER LOCATED NEAR 18.8N 110.6W AT 03/2100Z 
POSITION ACCURATE WITHIN 20 NM 

REPEAT...CENTER LOCATED NEAR 18.8N 110.6W AT 03/2100Z 
AT 03/1800Z CENTER WAS LOCATED NEAR 18.6N 110.1W 

FORECAST VALID 04/0600Z 19.2N 112.2W 
MAX WIND 65 KT...GUSTS 80 KT. 
64 KT... 10NE 0SE 0SW 10NW. 
50 KT... 30NE 30SE 20SW 20NW. 
34 KT... 50NE 50SE 40SW 40NW. 

FORECAST VALID 04/1800Z 20.0N 114.3W 
MAX WIND 75 KT...GUSTS 90 KT. 
64 KT... 20NE 10SE 10SW 20NW. 

, и я пытаюсь сделать программу в C, который будет читать через файл и найти строку слова ПРОГНОЗА ДЕЙСТВУЕТ , Каждый раз, когда строка имеет слова FORECAST VALID, я хочу, чтобы программа печатала строку и «===>» перед строкой. Для остальной части документа я просто хочу просто напечатать строку.

Конечный результат, поставленные программы должен выглядеть следующим образом:

REPEAT...CENTER LOCATED NEAR 18.8N 110.6W AT 03/2100Z 
AT 03/1800Z CENTER WAS LOCATED NEAR 18.6N 110.1W 

===>FORECAST VALID 04/0600Z 19.2N 112.2W 
MAX WIND 65 KT...GUSTS 80 KT. 
64 KT... 10NE 0SE 0SW 10NW. 
50 KT... 30NE 30SE 20SW 20NW. 
34 KT... 50NE 50SE 40SW 40NW. 

===>FORECAST VALID 04/1800Z 20.0N 114.3W 
MAX WIND 75 KT...GUSTS 90 KT. 
64 KT... 20NE 10SE 10SW 20NW. 

У меня есть некоторые фрагменты кода, которые печатают документ дословно без ===> но мне просто нужна помощь в том, как изолировать из ПРОГНОЗ ДЕЙСТВИТЕЛЬНО от линии так, чтобы поставить ===> в этих строках:

FILE *fr;   /* declare the file pointer */ 

main() 
{ 
    int n; 
    char line[800]; 
    char buf[255]; 
    fr = fopen ("wtnt23.knhc.201410141453", "rt"); /* open the file for reading */ 

    while(fgets(line, 800, fr) != NULL) 
    { 
    sscanf (line, "%s", buf); 
    if (buf="FORECAST") 
    { 
     printf("===>%s",line); 
    } 
    else 
    { 
     printf("%s",line); 
    } 
    fclose(fr); /* close the file prior to exiting the routine */ 
} /*of main*/ 
+0

Вы можете найти стандартные функции библиотеки C 'strncmp()' полезно для того, что вы пытаетесь сделать. –

ответ

1

Я хотел бы использовать std::strings и iostreams, а не массивы символов и FILE*.

Нечто вроде:

int main() 
{ 
    std::ifstream ifs("wtnt23.knhc.201410141453"); 

    std::string line; 

    while(std::getline(ifs, line)) // loop as long as getline() succeeds 
    { 
     if(line.find("FORECAST VALID") == 0) // line starts with this? 
     { 
      // output ===> 
     } 
     // output line + linefeed 
    } 
} 
3

if (buf="FORECAST") совершенно неправильно. это не сравнить, и вы не можете скопировать в массив символов с = ...

Вам просто нужно сделать так:

while(fgets(line, 800, fr) != NULL) 
{ 
    if(0 == strncmp(line, "FORECAST VALID", strlen("FORECAST VALID"))) 
    { 
     printf("===>%s",line); 
    } 
    else 
    { 
     printf("%s",line); 
    } 
} 
Смежные вопросы