0

指定された番号に基づいてテキスト ファイルから特定の行を出力する関数を作成しようとしています。たとえば、ファイルに次のものが含まれているとします。

1 hello1 one
2 hello2 two
3 hello3 three

指定された数が「3」の場合、関数は「hello3 three」を出力します。指定された番号が「1」の場合、関数の出力は「hello1 one」になります。

私はCに非常に慣れていませんが、これまでの私のロジックは次のとおりです。

ファイル内の文字「番号」を見つける必要があります。じゃあ何?番号を含めずに行を書き出すにはどうすればよいですか? どうすれば「番号」を見つけることができますか? とても簡単だと思いますが、これを行う方法がわかりません。これが私がこれまでに持っているものです:

void readNumberedLine(char *number)
{
    int size = 1024;
    char *buffer = malloc(size);
    char *line;
    FILE *fp;
    fp = fopen("xxxxx.txt", "r");
    while(fp != NULL && fgets(buffer, sizeof(buffer), fp) != NULL)
    {
      if(line = strstr(buffer, number))
      //here is where I am confused as to what to do.           
    }
    if (fp != NULL)
    {
            fclose(fp);
    }
}

どんな助けでも大歓迎です。

4

3 に答える 3

1

私は次のことを試してみます。

アプローチ 1:

Read and throw away (n - 1) lines 
// Consider using readline(), see reference below
line = readline() // one more time
return line

アプローチ 2:

Read block by block and count carriage-return characters (e.g. '\n'). 
Keep reading and throwing away for the first (n - 1) '\n's
Read characters till next '\n' and accumulate them into line
return line

readline(): C で一度に 1 行ずつ読み取る

PS 以下はシェル ソリューションです。C プログラムの単体テストに使用できます。

// Display 42nd line of file foo
$ head --lines 42 foo | tail -1
// (head displays lines 1-42, and tail displays the last of them)
于 2013-04-23T04:04:03.380 に答える