2

ファイルに次のコンテンツがあります。

hhasfghgsafjgfhgfhjf
gashghfdgdfhgfhjasgfgfhsgfjdg
jfshafghgfgfhfsghfgffsjgfj
.
.
.
.
.
startread
hajshjsfhajfhjkashfjf
hasjgfhgHGASFHGSHF
hsafghfsaghgf
.
.
.
.
.
stopread
.
.
.
.
.
.
jsfjhfhjgfsjhfgjhsajhdsa
jhasjhsdabjhsagshaasgjasdhjk
jkdsdsahghjdashjsfahjfsd

次の行からac コードを使用startreadする前の行までの行を読み取り、それを文字列変数に格納する必要があります (もちろん、改行ごとに)。どうすればこれを達成できますか? 使っていますが、最初から読み始めます。ファイルは別の C コードによって書き込まれているため、読み取りを開始および停止する正確な行番号がありません。しかし、これらの識別子があり、どこから読み始めるかを識別します。動作プラットフォームは Linux です。前もって感謝します。stopread\nfgets(line,sizeof(line),file);startreadstopread

4

2 に答える 2

1

strcmp()を検出するために使用します。読み取られるまですべての行を無視し、読み取られるまですべての行を保存します。startreadstopread"startread""stopread"

/* Read until "startread". */
char line[1024];
while (fgets(line, sizeof(line), file) &&
       0 != strcmp(line, "startread\n"));

/* Read until "stopread", only if "startread" found. */
if (0 == strcmp(line, "startread\n"))
{
    while (fgets(line, sizeof(line), file) &&
           0 != strcmp(line, "stopread\n"))
    {
        /* Do something with 'line'. */
    }
}
于 2012-06-22T15:06:59.483 に答える
0
    #define MAX_BUF_LEN 1000    
    int flag=0;
    while(fgets(buf, MAX_BUF_LEN, file) != NULL){
       if(strncmp(buf, "startread", strlen("startread")) == 0){
          flag=1;
       }
       else if (strncmp(buf, "stopread", strlen("stopread")) == 0){
          flag=0;
       }

       if(flag){
          strncpy(line, buf, strlen(buf));
         // strncat(line, '\n', strlen('\n'));
       }

    // that's all!
    }
    fclose(file);

これは機能するはずです。

于 2012-06-22T15:19:15.193 に答える