C ++はファイルハンドルを介してインファイルデータにアクセスできますか?たとえば、Perlの典型的なイディオムは次のとおりです。
while (<DATA>) {
chomp;
# do sth with $_
}
__DATA__
Foo
Bar
C ++でそれを行う方法は何ですか?
C ++はファイルハンドルを介してインファイルデータにアクセスできますか?たとえば、Perlの典型的なイディオムは次のとおりです。
while (<DATA>) {
chomp;
# do sth with $_
}
__DATA__
Foo
Bar
C ++でそれを行う方法は何ですか?
プログラム内にファイルを含めるということですか?
いいえ、C++ ではそれができません。Perl と同じ方法ではありません。バイナリ ファイルまたはテキスト ファイルを取り、それらを C/C++ ソース コードとしてパッケージ化するツールは多数あります。それらは最終的にグローバル配列になります。
私が常に便利だと思っていることの 1 つは、ランダム メモリをファイル ハンドルとして開く機能です。標準 C++ では、ifstream と同じインターフェイスを持つ istringstream クラスでこれを実現できます。
しかし、あなたの質問の文脈は、あなたが考えていることを C/C++ で達成するためのより良い方法があることを暗示しているかもしれません。詳細情報が必要です。
C++ コードで見たことがないので慣用的とは言えませんが、C++ 文字列ストリームと C プリプロセッサ文字列の貼り付けを使用して、複数行の文字列を入力ストリームとして扱うことができます。
#include <sstream>
#include <iostream>
using namespace std;
const string data =
"once upon a time, " \
"a young lass called Goldilocks\n" \
"went for a walk in the forest.\n";
int main ()
{
istringstream in (data);
for (string line; getline(in, line); )
cout << line << endl;
return 0;
}
C++ には、これを行う慣用的な方法はありません。代わりに別のデータ ファイルを使用してください。
プラットフォームによっては、リソースを使用して同様の結果を達成したい場合がありますが、これは C++ の範囲を超えています。特に、バイナリ ファイルにリソースを格納するには、外部ツールを使用する必要があり、これらのリソースをコードで読み取るには、プラットフォーム API を呼び出す必要があります。たとえば、Windows では、LoadResource
関数 (および関連) があります。