C++でファイルを読み込むときに、どのようにEOFを通知するのですか?私は、ファイルを読み込んでそれを言語のトークンに分割するコンパイラデザインの一環として、直接コード化されたスキャナを作成しています。プログラムが開くファイルにEOFを通知する方法
私はプログラム全体を読み、コメントを取り除き、空白を圧縮します。次に、得られたプログラムcharをcharで最大1024文字のバッファに入れます。だから私たちが空になったら、バッファーを補充するか、そうでないものを補充します。私は、この書かれているファイルを開くには
:バッファを満たすために
// Open source file.
source_file.open (filename);
if (source_file.fail()) {
// Failed to open source file.
cerr << "Can't open source file " << *filename << endl;
buffer_fatal_error();
を、私は、whileループを使用して
int i = 0;
// Iterate through the whole file
while(source_file.at(i) != EOF)
{
// If not a tab or newline add to buffer
if (source_file.at(i) != "\n" || source_file.at(i) != "\t")
{
bufferList.add(source_file.at(i));
}
i++;
}
のように反復したいと思っています知らせるための方法が存在することになります私が開いているファイルのようなEOF?
これは多かれ少なかれ、何をすべきかの概要です。私が空になったらバッファを補充する方法やデュアルバッファリングを使う方法を理解する必要があります。私はまた、#
で始まるコメントを取り除く方法を理解する必要があります。例えば、# This is a comment
。私のスキャナでは#
が表示され、それ以降はすべて次の改行文字が得られるまで削除されます。データを読み出すための標準的な方法はwhile
ループにおける読み出し動作の結果をテストすることである
char c;
std::vector<char> buffer(1024);
while (source_file.get(c))
{
if ((c != '\n') || (c != '\t'))
{
buffer.push_back(c);
}
}
:
EOFは、ファイルの末尾にヌル値を探していることを意味しています。 –
バッファーに 'std :: vector'を使用し、バッファーにデータを読み込む 'istream :: read()'を試してください。 –
@ThomasMatthewsは 'istream :: read()'で空白を取り除きますか? – GenericUser01