首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 基礎

C++ ASCII 檔案讀寫實戰:格式化資料的靈活處理

     編輯:C++ 基礎

ASCII 檔案特性

每個位元組存放一個 ASCII 碼,對應一個可見字元。優點:人類可直接閱讀(記事本開啟)、支援格式化輸出入;缺點:數值轉換耗時、佔空間大(整數 100000 需 6 位元組 vs 二進位 4 位元組)。

兩種操作方式

  1. 流運算子 << / >>:繼承自 iostream,用法與 cout/cin 幾乎相同,自動處理型別轉換
  2. 成員函式 put/get/getline:單字元/整行操作,控制力更細緻

範例 1:鍵盤輸入 10 整數存檔

int a[10];
ofstream outfile("f1.dat"); // 預設 ios::out
for (int i=0; i<10; ++i) {
    cin >> a[i];
    outfile << a[i] << ' '; // 必須加空格分隔!
}
outfile.close();

關鍵:輸出數值後必須加分隔符(空格/換行),否則讀回時無法區分「123」是 1、2、3 還是 123。

範例 2:讀回、尋找最大值與索引

ifstream infile("f1.dat", ios::in | ios::nocreate); // nocreate 舊標準,新編譯器可省略
for (int i=0; i<10; ++i) infile >> a[i]; // 自動跳過空白字元
// 尋找最大值邏輯...
infile.close();

範例 3:字元過濾與大小寫轉換

// 階段 1:從鍵盤讀一行,仅保留字母存入 f2.dat
void save_to_file() {
    ofstream outfile("f2.dat");
    char line[80];
    cin.getline(line, 80);
    for (int i=0; line[i]; ++i)
        if (isalpha(line[i])) { outfile.put(line[i]); cout.put(line[i]); }
    outfile.close();
}

// 階段 2:從 f2.dat 讀取,小寫轉大寫存入 f3.dat
void get_from_file() {
    ifstream infile("f2.dat");
    ofstream outfile("f3.dat");
    char ch;
    while (infile.get(ch)) {
        if (islower(ch)) ch = toupper(ch);
        outfile.put(ch); cout.put(ch);
    }
    infile.close(); outfile.close();
}

檢視 ASCII 檔案內容的兩種方法

  1. 命令列:Windows TYPE f3.dat、Linux cat f3.dat
  2. 自訂顯示函式:
    void display_file(const char* filename) {
        ifstream infile(filename);
        char ch;
        while (infile.get(ch)) cout.put(ch);
        cout << endl;
        infile.close();
    }

進階觀察:流物件的多型特性

cin、infile 同屬 istream 體系,cout、outfile 同屬 ostream 體系。同樣的 get/put/getline 既可用於標準裝置,也可用於檔案流,體現 C++ I/O 庫的可擴展性與一致性。

總結

ASCII 檔案適合需人工閱讀、跨平台交換、格式化報表的場景。善用 <</>> 處理結構化數值,用 put/get/getline 處理字元級邏輯,並記住分隔符原則,即可靈活駕馭文字資料流。

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