97

私はファイルを紹介するチュートリアルにいます(ファイルからの読み取りとファイルへの書き込みの方法)

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

一度に1単語ずつ読む方法は知っていますが、一度に1行ずつ読む方法や、テキストファイル全体を読む方法がわかりません。

ファイルに1000語が含まれている場合はどうなりますか?ファイル全体を単語ごとに読み取ることは実用的ではありません。

「読み取り」という名前のテキストファイルには、次のものが含まれています。

I love to play games
I love reading
I have 2 books

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

#include <iostream>
#include <fstream>

using namespace std;
int main (){
   
  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>

各行または各単語を個別に読み取るのではなく、ファイル全体を一度に読み取る方法はありますか?

4

9 に答える 9

179

あなたが使用することができますstd::getline

#include <fstream>
#include <string>

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

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

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

おそらく、テキストファイル全体を読み取る最も簡単な方法は、取得した行を連結することです。

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');
}  
于 2012-10-23T17:09:51.990 に答える
22

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

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

int main() {

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

    while(file >> content) {
        cout << content << ' ';
    }
    return 0;
}
于 2013-10-29T01:04:06.483 に答える
5

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

于 2012-10-23T17:37:54.200 に答える
5

これを行うには、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;
}
于 2015-04-30T19:31:47.027 に答える
1

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

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

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

次に、ベクトルを繰り返し処理して、必要なものを変更/抽出します/

于 2012-10-23T17:40:37.470 に答える
1

上記の解決策は素晴らしいですが、「一度にファイルを読み取る」ためのより良い解決策があります。

fstream f(filename);
stringstream iss;
iss << f.rdbuf();
string entireFile = iss.str();
于 2021-06-18T08:25:20.647 に答える
0

こんにちは仲間これは、このコードを使用して正確な行の文字列を読み取る方法です

これがお役に立てば幸いです。

#include <iostream>
#include <fstream>

using namespace std;


int main (){


    string text[1];
    int lineno ;
    ifstream file("text.txt");
    cout << "tell me which line of the file you want : " ;
    cin >> lineno ; 



    for (int i = 0; i < lineno ; i++)
    {
        
        getline(file , text[0]);

    }   

    cout << "\nthis is the text in which line you want befor  :: " << text[0] << endl ;
    system("pause");

    return 0;
}

幸運を !

于 2020-11-01T00:33:43.423 に答える
0

これを使用して、ファイル内のすべての行を1つずつ読み取り、iを出力することもできます。

#include <iostream>
#include <fstream>

using namespace std;



bool check_file_is_empty ( ifstream& file){
    return file.peek() == EOF ;
}

int main (){


    string text[256];
    int lineno ;
    ifstream file("text.txt");
    int num = 0;

    while (!check_file_is_empty(file))
    {    
        getline(file , text[num]);
        num++;
    }
    for (int i = 0; i < num ; i++)
    {
        cout << "\nthis is the text in " <<  "line " << i+1 << " :: " << text[i] << endl ;


    }
    
    system("pause");

    return 0;
}

これがあなたを助けることができることを願っています:)

于 2020-11-01T00:53:36.740 に答える
0

以下のスニペットは、Unicode文字で構成されるファイルを読むのに役立ちます

CString plainText="";
errno_t errCode = _tfopen_s(&fStream, FileLoc, _T("r, ccs=UNICODE"));
    if (0 == errCode)
    {
        CStdioFile File(fStream);
        CString Line;
        while (File.ReadString(Line))
        {
            plainText += Line;
        }
    }
    fflush(fStream);
    fclose(fStream);

読んだ後は常にファイルポインタを閉じる必要があります。そうしないと、エラーが発生します

于 2021-06-18T08:57:56.883 に答える