Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 阅读文档并在文档中查找特定单词_C_Parsing_Text - Fatal编程技术网

C 阅读文档并在文档中查找特定单词

C 阅读文档并在文档中查找特定单词,c,parsing,text,C,Parsing,Text,我有以下文件: 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 NE

我有以下文件:

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是有效的。每次一行中有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.
while(fgets(line, 800, fr) != NULL)
{
   if(0 == strncmp(line, "FORECAST VALID", strlen("FORECAST VALID")) )
   {
       printf("===>%s",line);
   }
   else
   {
        printf("%s",line);
   }
}
我确实有一些代码片段可以在没有==>的情况下逐字打印文档,但我只需要帮助,了解如何将有效预测从行中分离出来,以便将==>放在这些行中:

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*/

我会使用
std::strings
iostreams
而不是char数组和
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
    }
}
如果(buf=“FORECAST”)
完全错误。它是不可比较的,并且您不能使用
=

你只需要这样做:

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.
while(fgets(line, 800, fr) != NULL)
{
   if(0 == strncmp(line, "FORECAST VALID", strlen("FORECAST VALID")) )
   {
       printf("===>%s",line);
   }
   else
   {
        printf("%s",line);
   }
}

您可能会发现标准C库函数
strncmp()
对于您正在尝试的操作非常有用。