2013-03-20 463 views
-10

如何在C++中編寫代碼讀取.dat文件,這些文件包含文本數據(數字和用分隔符組織的字符)。是fstream標準庫的最佳選擇?我們如何定義文件路徑。第二個問題是,如果我想讀這些文件並將它們加載到SQL Server數據庫中,它會是不同的機制?如何在C++中讀取.dat文件

+1

你的問題提供足夠的細節來回答:不存在「.dat文件格式」,'.dat'是一個通用的文件擴展名。沒有「fstream庫」 - 你可能是指標準的庫類「std :: fstream」,但這個問題是一個重複術語:是的,你使用它,但這不會幫助你。最後,你沒有提供關於你正在處理的數據的信息,所以我們不知道如何將它們加載到SQL服務器中。 – 2013-03-20 15:56:32

+0

@KonradRudolph文件包含文本,並以這種方式編寫,當我將它們加載到數據庫中時,每個文件將形成一個表格,它們包含|作爲分隔符來分隔列,我可以手動將擴展名更改爲txt並打開並讀取它們,我需要知道如何編寫C++代碼來讀取它們 – Hawk 2013-03-20 16:07:48

+0

@jcarlos我之前沒有處理過文件,所以如果您推薦一些簡要教程我會很感激 – Hawk 2013-03-20 16:08:42

回答

2

是的,你可以使用fstream來做到這一點。

以下是一些代碼,您可以使用 將數據拆分成由分隔符分隔的數組。只需將 DELIMITER更改爲您的分隔符。

#include <iostream> 
using std::cout; 
using std::endl; 

#include <fstream> 
using std::ifstream; 

#include <cstring> 

const int MAX_CHARS_PER_LINE = 512; 
const int MAX_TOKENS_PER_LINE = 20; 
const char* const DELIMITER = " "; 

int main() 
{ 
    // create a file-reading object 
    ifstream fin; 
    fin.open("data.txt"); // open a file 
    if (!fin.good()) 
    return 1; // exit if file not found 

    // read each line of the file 
    while (!fin.eof()) 
    { 
    // read an entire line into memory 
    char buf[MAX_CHARS_PER_LINE]; 
    fin.getline(buf, MAX_CHARS_PER_LINE); 

    // parse the line into blank-delimited tokens 
    int n = 0; // a for-loop index 

    // array to store memory addresses of the tokens in buf 
    const char* token[MAX_TOKENS_PER_LINE] = {}; // initialize to 0 

    // parse the line 
    token[0] = strtok(buf, DELIMITER); // first token 
    if (token[0]) // zero if line is blank 
    { 
     for (n = 1; n < MAX_TOKENS_PER_LINE; n++) 
     { 
    token[n] = strtok(0, DELIMITER); // subsequent tokens 
     if (!token[n]) break; // no more tokens 
    } 
} 

    // process (print) the tokens 
    for (int i = 0; i < n; i++) // n = #of tokens 
     cout << "Token[" << i << "] = " << token[i] << endl; 
    cout << endl; 
    } 
} 

來存儲數據到數據庫中看一看MySql

+1

謝謝,這將是非常有用的 – Hawk 2013-03-20 16:58:26