長いテキスト行を含むかもしれないテキストファイルを読む必要があります。私はこれを行う最善の方法を考えています。効率を考えると、私はC++でこれをやっていますが、IOを行うためにCライブラリ関数を選択しています。Cのテキストファイルを読むのに良い方法
私は線がどれくらい長いのか分からないので、大きな配列を割り当ててからfgets
を使って行を読みたいとは思いません。一方、私は各行がどこで終わるかを知る必要があります。そのような場合の1つの使用例は、各行の単語/文字を数えることです。私は小さな配列を割り当てて、\r,
\n
、または\r\n
が存在するかどうかを調べて、完全な行が読み込まれているかどうかを調べるために、fgets
を使用して読み取ることができます。しかし、これには多くのstrstr
コールが含まれています(\r\n
の場合や、fgetsの戻り値などのより良い方法があります)。また、一度に1つずつ個々の文字を読むには、fgetc
を実行することもできます。しかし、この関数はバッファリングを持っていますか?
このタスクを実行する際のこれらの方法または他のさまざまな方法を比較することをお勧めします。
C++と 'std :: string'と' std :: getline'を使用してください。何故なの?プロファイルが遅すぎると主張する前にプロフィール –
'fgets()'は、通常の状況下では行末として '\ r'を読みません。 POSIX 2008と['getline()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)を見てください。しかし、それを使うことによる移植性の影響に注意してください。 POSIXの 'getline()'であっても、単一の区切り文字のみを扱う(getdelim()と同様に)。同じページ)。 –
fread()またはread()でファイル全体を読み込み、 '\ n'を検索します。同様のことはmmap()を使って行うことができます。 – wildplasser