簡體   English   中英

C ++ - 按順序打開文本文件

[英]C++ - Opening text files sequentially

我有數百個按文件排序的.txt文件:1.txt,2.txt,3.txt,... n.txt。 在每個文件中有兩列帶有十進制數字。 我編寫了一個算法,只對一個.txt文件執行一些操作,現在我想以遞歸方式對所有文件執行相同操作。 這個有用的問題讓我對我正在嘗試做的事情有所了解。 現在我正在嘗試編寫一個算法來讀取所有文件:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () 
{
int i, n;
char filename[6];
double column1[100], column2[100];
for (n=1;n=200;n++)
{
sprintf(filename, "%d.txt", n);
ifstream datafile;
datafile.open(filename);
    for (i=0;i<100;i++)
    {
    datafile >> column1[i] >> column2[i];
    cout << column1[i] << column2[i];
    }
datafile.close();
}
return 0;
}

我認為代碼正在做什么:它是從1.txt到200.txt創建字符串名稱,然后它打開帶有這些名稱的文件。 對於每個文件,前100列將與數組column1和column2相關聯,然后這些值將顯示在屏幕上。 編譯時我沒有收到任何錯誤,但是當我運行它時輸出很大並且根本不會停止。 如果我將輸出設置為.txt文件,它很容易達到一些Gb! 我也試過減少循環次數並減少列數(到3左右),但我得到無限輸出。 如果有人能指出我在代碼中所犯的錯誤,我會很高興...我正在使用gcc 5.2.1和Linux。 謝謝!

  • 6元素數組太短,無法存儲"200.txt" 它必須至少8個元素。
  • 條件n=200是錯誤的並且始終為真。 它應該是n<=200

如果您的所有文件都在同一目錄中,您還可以使用boost::filesystem ,例如:

auto path = "path/to/folder";
std::for_each(boost::filesystem::directory_iterator{path},
        boost::filesystem::directory_iterator{},
        [](boost::filesystem::directory_entry file){
            // test if file is of the correct type
            // do sth with file
        });

我認為這是一個更清潔的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM