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

VC++ 讀取 .dat 數據檔案:格式解析與標準文件操作範例

     編輯:VC 教學

.dat 並非標準格式,而是「數據檔」的通用副檔名,實際內容可能是文本、二進位結構體、陣列序列化等。讀取前必須確認數據格式 (由寫入端定義)。本文示範最常見的「文本浮點數逐行/逐欄位」讀取模式。

文本模式讀取範例 (假設每行一個 double)

bool ReadDatFile(const char* filename, double* buffer, int maxCount, int& actualCount) {
    FILE* fp = fopen(filename, "r"); // 文本模式
    if (!fp) return false;

    actualCount = 0;
    while (actualCount < maxCount) {
        double val;
        // %lf 讀取 double,自動跳過空白字元 (空格、換行、Tab)
        if (fscanf(fp, "%lf", &val) != 1) break;
        buffer[actualCount++] = val;
    }
    fclose(fp);
    return true;
}

// 使用
double data[1000];
int count;
if (ReadDatFile("signal.dat", data, 1000, count)) {
    // 成功讀取 count 個 double
}

二進位模式讀取範例 (假設檔案為連續 double 陣列)

bool ReadDatBinary(const char* filename, double* buffer, int maxCount, int& actualCount) {
    FILE* fp = fopen(filename, "rb"); // 二進位模式 關鍵!
    if (!fp) return false;

    // 讀取整個陣列 (或分塊讀取)
    size_t read = fread(buffer, sizeof(double), maxCount, fp);
    actualCount = static_cast(read);
    fclose(fp);
    return true;
}

關鍵差異與選擇指南

模式fopen 模式讀取函數適用場景跨平台
文本"r"fscanf, fgets+解析人類可讀、CSV、日誌、ASCII 浮點數良好 (注意換行符 CR/LF/CRLF)
二進位"rb"fread高效、結構體陣列、影像/聲音原始數據需注意位序/對齊/浮點數標準 (IEEE 754)

MFC 封裝版 (CFile + CArchive)

void ReadDatMFC(const CString& path, CArray& arr) {
    CFile file;
    if (!file.Open(path, CFile::modeRead | CFile::typeBinary)) return;
    CArchive ar(&file, CArchive::load);
    double val;
    while (ar.Read(&val, sizeof(double)) == sizeof(double))
        arr.Add(val);
    ar.Close(); file.Close();
}

格式未知時的偵測建議

  1. 用十六進位編輯器 (如 HxD) 開啟檔案,觀察是否可見 ASCII 字元、規律結構。
  2. 嘗試文本讀取,若 fscanf 失敗率高,改二進位。
  3. 詢問數據產生方 (儀器手冊、協定文檔、發送端代碼)。

核心原則:沒有通用的 .dat 讀取器,只有針對特定格式的讀取代碼。

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