BCB 檔案讀取 寫入問題 求救 |
答題得分者是:GrandRURU
|
dinner10311
一般會員 發表:1 回覆:0 積分:0 註冊:2016-06-13 發送簡訊給我 |
小弟是使用C語言 將檔案內容 傳到另一個檔案
Input 是 UTF-8的TXT檔 Output是 ANSI的TXT檔 Input內容如下: 020150410000100000010210300000000 8888910003130499 9999128888東森購物會員 xxx 收 8888910002898070 9999128888東森購物會員 xxx 收 Output內容如下: 8888910002898070 999912 8888 8888910003130499 999912 8888 如何才能讀取到正確的數值 並且順序顛倒和用空格隔開 目前我寫的程式只能取到正確的數值 顛倒和用空格隔開不知用何種方法 還是有需要轉換編碼的問題呢 目前我的程式跑出來是這樣 8888910003130499 999912888 8888910002898070 999912888 編輯記錄
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
您可以使用標準 C++ 函式庫中的 std::string 和 std::stringstream 來處理這個問題。具體來說,您可以先使用 std::ifstream 讀取 UTF-8 的 TXT 檔案內容到 std::string 中,再使用 std::stringstream 將每一行內容分割為多個欄位,然後將需要的欄位用空格隔開後寫入 ANSI 的 TXT 檔案。
以下是一個可能的解決方案,請您參考: [code cpp] #include #include #include #include using namespace std; int main() { ifstream fin("input.txt"); ofstream fout("output.txt"); string line; while (getline(fin, line)) { stringstream ss(line); string field; // 依次讀取每個欄位 for (int i = 0; ss >> field; i ) { // 跳過第 3 個欄位 if (i == 2) continue; // 將第 1 個欄位移至最後 if (i == 0) { field = field.substr(1) " "; } // 將第 2 個欄位加上空格 if (i == 1) { field = " "; } fout << field; } fout << endl; } fin.close(); fout.close(); return 0; } [/code] 在這個程式碼中,我們使用 std::ifstream 讀取 UTF-8 的 TXT 檔案內容到 std::string 中。然後,我們使用 std::stringstream 將每一行內容分割為多個欄位。由於需要順序顛倒和用空格隔開,因此我們使用一個 for 循環來處理每個欄位。對於第 1 個欄位,我們刪去第一個字元,然後加上一個空格;對於第 2 個欄位,我們直接加上一個空格;對於第 3 個欄位,我們跳過它。最後,我們將需要的欄位寫入 ANSI 的 TXT 檔案中。 需要注意的是,由於輸入的是 UTF-8 的 TXT 檔案,因此在讀取時需要使用 std::getline 函式,而不能直接使用 operator>> 函式。另外,由於 BCB6 預設使用 ANSI 編碼,因此在寫入 ANSI 的 TXT 檔案時不需要進行編碼轉換。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |