首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ fstream 合併多個同表頭文字檔:略過重複表頭,僅保留第一檔表頭

     編輯:程式設計綜合問答

需求

合併 `1.txt`、`2.txt`... 為 `output.txt`。檔案為表格格式,**表頭相同**,合併後**僅保留第一檔表頭**,資料行連續輸出。

完整可執行範例 (C++17)


#include 
#include 
#include 
#include 

int main(int argc, char* argv[]) {
    if (argc < 4) {
        std::cerr << "Usage: merge.exe file1.txt file2.txt ... output.txt\n";
        return 1;
    }

    std::string outPath = argv[argc - 1];
    std::ofstream fout(outPath);
    if (!fout) { std::cerr << "Cannot open output\n"; return 1; }

    bool firstFile = true;
    for (int i = 1; i < argc - 1; ++i) {
        std::ifstream fin(argv[i]);
        if (!fin) { std::cerr << "Cannot open " << argv[i] << "\n"; continue; }

        std::string line;
        bool firstLine = true;
        while (std::getline(fin, line)) {
            if (firstLine) {
                if (firstFile) {
                    fout << line << '\n'; // 寫入表頭
                }
                // 非第一檔:略過表頭
                firstLine = false;
            } else {
                fout << line << '\n'; // 寫入資料行
            }
        }
        firstFile = false;
        fin.close();
    }
    fout.close();
    std::cout << "Merged to " << outPath << "\n";
    return 0;
}

編譯與執行


g++ -std=c++17 merge.cpp -o merge
./merge 1.txt 2.txt 3.txt output.txt

關鍵邏輯

  • `firstFile` 控制**全域是否寫入表頭**。
  • 每檔 `firstLine` 控制**單檔是否略過表頭**。
  • 逐行讀寫 (`getline` + `<<`),記憶體常數,支援超大檔。
  • 自動處理 Windows `\r\n` / Linux `\n` (getline 移除 `\n`,輸出 `<< '\n'` 統一)。

擴充:支援 CSV 欄位含逗號/換行

若檔案為標準 CSV (欄位含逗號用雙引號包裹),建議用成熟庫:**`csv2`**, **`fast-cpp-csv-parser`**, **`RapidCSV`** 解析後再寫入,避免手寫解析器 Bug。

總結

合併同表頭文字檔:**第一檔寫表頭,後續檔略過首行,資料行逐行追加寫入**。C++ `fstream` 逐行流式處理,記憶體安全、效能佳、跨平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved