web-dev-qa-db-ja.com

1行ずつまたはテキストファイル全体を一度に読み取る方法

私はファイルを紹介するチュートリアルに参加しています(ファイルの読み書き方法)

まず第一に、これは宿題ではありません、これは私が求めている単なる一般的な助けです。

一度に1つのWordを読み取る方法はわかりますが、一度に1行ずつ読み取る方法やテキストファイル全体を読み取る方法がわかりません。

ファイルに1000語が含まれているとどうなりますか?各単語を読むのは実用的ではありません。

私の(Read)という名前のテキストファイルには、次のものが含まれています。

私はゲームが好きです読書が好きです私は2冊の本を持っています

これが私がこれまでに達成したことです。

#include <iostream>
#include <fstream>

using namespace std;
int main (){

  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>

各行または各Wordを別々に読み取る代わりに、ファイル全体を一度に読み取る方法はありますか?

73
Mody

std::getlineを使うことができます:

#include <fstream>
#include <string>

int main() 
{ 
    std::ifstream file("Read.txt");
    std::string str; 
    while (std::getline(file, str))
    {
        // Process str
    }
}

また、明示的に開くのではなく、単にコンストラクタ内のファイル名を使用してファイルストリームを構築するほうが良いことに注意してください(同様に閉じて、デストラクタに作業を任せます)。

std::string::getline()に関するさらなるドキュメントは CPPリファレンス で読むことができます。

おそらくテキストファイル全体を読むための最も簡単な方法はそれらの検索された行を連結することです。

std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
  file_contents += str;
  file_contents.Push_back('\n');
}  
140
111111

これは本当に古いスレッドであることを私は知っていますが、私は実際には本当に簡単な別の方法も指摘したいと思います...これはいくつかのサンプルコードです:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {

ifstream file("filename.txt");
string content;

while(file >> content) {
cout << content << ' ';
}
return 0;
}
19
user2673553

私はあなたがistream .read()関数を使用できると思います。妥当なチャンクサイズでループしてメモリバッファに直接読み込むことができ、それを何らかの任意のメモリコンテナ(std :: vectorなど)に追加することができます。私は例を書くことができますが、私はあなたが完全な解決策を望んでいるとは思わない。追加情報が必要な場合はお知らせください。

4

さて、これを行うには、C++で提供されているfreopen関数を使用することもできます - http://www.cplusplus.com/reference/cstdio/freopen/ 次のようにファイルを1行ずつ読みます -

#include<cstdio>
#include<iostream>

using namespace std;

int main(){
   freopen("path to file", "rb", stdin);
   string line;
   while(getline(cin, line))
       cout << line << endl;
   return 0;
}
4
AnkitSablok

まだ言及されていない別の方法はstd::vectorです。

std::vector<std::string> line;

while(file >> mystr)
{
   line.Push_back(mystr);
}

それから、単純にベクトルを反復処理し、必要なものを修正/抽出することができます/

1
Bugster