2011-10-15 12 views
-2

ファイル内のテキストを正常に読み取ることができましたが、テキストなどの空のスペースにヒットするまで読み取ります。「こんにちは、これはテストです"、のようなもの:"こんにちは、 "。ファイルから読み込み、空白になるまでテキストのみを読み取る

"、"を削除すると違いはありません。

私は次のコードビットに「inFil.ignore(1000,'\n');」に似た何かを追加する必要があると思う:

inFil>>text; 
inFil.ignore(1000,'\n'); 
cout<<"The file cointains the following: "<<text<<endl; 

それは本質的なプログラムをやり直すために私を強制するので、私はgetline(inFil, variabel);に変更したくありませんワーキング。

ご協力いただきありがとうございます。これは非常に小さく簡単に修正された問題のようですが、解決策を見つけることができないようです。

+0

をそれの動作を変更する必要がある場合には、プログラムをリファクタリングするために良いことです。読み込み部分の周りにテストを書いて、 'readline'のために行ってください。テストを受けたら、プログラムの変更を開始し、プログラムの安全性を感じることができます。 – xtofl

+2

"本質的に働いているプログラムを再実行するよう強制する__"プログラムが "Hi"を読み、 "Hi、this is a test"と読みたい場合、プログラムは "_essentially working_"ですか? – curiousguy

+0

getline()への切り替えがあなたにとって残虐行為になる理由は本当にわかりません。これは、あなたが探している小さくて簡単な修正点を除いて、コード内で何も変わりません。 ignore()をするのよりもエレガントな方法。メー、ラインを取得したいのですが、なぜgetlineを使用しないのですか?そして、ええ、 "本質的に働く"、素晴らしい。 –

答えて

4
std::ifstream file("file.txt"); 
if(!file) throw std::exception("Could not open file.txt for reading!"); 
std::string line; 
//read until the first \n is found, essentially reading line by line unti file ends 
while(std::getline(file, line)) 
{ 
    //do something line by line 
    std::cout << "Line : " << line << "\n"; 
} 

これはファイルを読むのに役立ちます。あなたのコードが完成していないので、あなたが達成しようとしていることは分かりませんが、上記のコードは一般にC++のファイルを読むために使われます。

+1

'' ''を ''行に割り当てる必要はありません。デフォルトでは空になっています。それを変えれば+1が増えます。そして最後に改行文字を含んでいない 'line'について少し修正すると助けになるかもしれません(すでに例で見ているかもしれませんが)。 –

+0

@ChristianRau私が推測するように初期化する習慣:) – FailedDev

+0

'std :: endl'をループでストリームしないでください。それはかなり無駄です。 –

2

あなたはフォーマットされた抽出を使用して、1つの文字列を一度抽出しました。これは1つの単語を意味します。

あなたは、ファイル全体の内容を含む文字列たい場合:

std::fstream fs("/path/to/file"); 
std::string all_of_the_file(
    (std::istreambuf_iterator<char>(filestream)), 
    std::istreambuf_iterator<char>() 
); 
+1

+1本当に素晴らしいC++ソリューションです。 streambufのイテレータについて知っている人はほとんどいないと思います。 –

関連する問題