0

大きなデータ ファイルをいくつかの小さなテキスト ファイルに分割しようとしています。次のコードは、毎回新しいファイルを開いたり閉じたりしますが、これは実現不可能です。これを行う別の方法はありますか?

ifstream infile(file_name);

if(infile)
{
    char val;
    while(!infile.eof())
    {
        ofstream ofile (ofile_name);
        infile >> val;
        ofile << val;
        if( infile.peek() == '\n' )// last entry on the line has been read
        {
            row_counter++;
            if (row_counter == win_size)
                // generate new ofile_name
        }
        ofile.close();
    }
    infile.close();
}
4

1 に答える 1

1

出力ファイルを開いたり閉じたりしないと、複数の出力ファイルを作成することはできません。

その理由は、各出力ファイルに一意の名前を付ける必要があるためです。出力ファイルに役立つ名前を生成する必要があります。ファイル (コンテンツ) とファイル名の間の接続は、open 呼び出し (または ofstream コンストラクター) で行われます。

編集

各キャラクターの開閉を避けるには、ステータス変数が必要です。あなたの例row_counterではそれを使用できます。次の手順が必要です。

  • while(!infile.eof()) ループの前に最初のファイルを開く
  • あなたのファイルを閉じ、次の名前を生成し、あなたが書いた新しい場所を開きます// generate new ofile_name
  • 最後に、ループ後にオファイルを閉じます。

これは、次の方法で行うことができます。

if(infile)
{
    char val;

    row_counter = 0;
    ofstream ofile (ofile_name);

    while(!infile.eof())
    {
        infile >> val;
        ofile << val;

        if( infile.peek() == '\n' )// last entry on the line has been read 
        { 
            row_counter++; 

            if (row_counter == win_size) 
            {   
               row_counter = 0;
               ofile.close();
               // generate new ofile_name 
               ofile.open(ofile_name); // you might change the nMode parameter if necessary
            }
        } 
    } 

    ofile.close(); 
    infile.close(); 
} 
于 2012-06-18T10:51:48.110 に答える