2012-06-18 59 views
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(); 
} 
+0

你有沒有考慮更改代碼的indentaton。我可能會變得更可讀。 – harper

回答

1

如果不打開和關閉輸出文件,您將無法創建多個輸出文件。

原因是,每個輸出文件應該有一個唯一的名稱。您將不得不爲輸出文件生成有用的名稱。文件(內容)和文件名之間的連接將在公開調用(或流構造函數)中完成。

編輯

爲了避免打開和關閉您需要的每個狀態變量字符。在你的例子中,row_counter可用於它。你需要以下步驟:(!infile.eof())

  • 開放初期OFILE while循環
  • 前關閉了OFILE,生成一個名字並打開新的哪里哪里,你寫// 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(); 
} 
+0

是的,你是對的。我們可以通過寫入大量數據而不是逐個字符來完成它?所以頻繁的開/關操作會減少。如果是的話如何? – DataMiner

相關問題