※ 引述《HelloTony (嗨東尼)》之銘言:
: 老師要我們用DevC++打一個可以寫信的cord
: 可以讀取一個test.txt檔
: 其中有4個人(2男2女)的名字和4個人的email
: 要把它printf到另一個out.txt檔中
: 其中”王大明“要改成”王先生”(小姐依此類推)
: 再把email也printf出來
: 然後要加入信的內容
: 大致上知道要用fgets.strcpy.strcat……
: 但是不知道如何下手QAQ
: 再四天就要交了
: 但是也想搞懂啊~~
: 還有請各位幫忙了謝謝
剛剛下班看到這題
小弟不才 想說來解看看這題
請各位版大對我的解法 不吝指教 感恩
回到正題
其實原PO 這題的解法 端看
Data 端 的資料長的如何
我假設 原PO 所說的 test.txt 及 output.txt的格式如下:
//test.txt
王曉明 男 smallming@gmail.com
無全順 女 nopassall@hotmail.com
張曉嵐 女 lan@as.com
//output.txt
王先生 smallming@gmail.com
無小姐 nopassall@hotmil.com
張小姐 lan@as.com
則 小弟私以為 可以直接用fstream
一行一行處理
source code 如下:
// File Name : FILEIO.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
//用來讀取 Data的struct
typedef struct{
string name;
string gender;
string email;
}email_entry;
// main function
int main(){
email_entry input_s;
string output_s;
fstream filein,fileout;
filein.open("D:\\test.txt",ios::in|ios::binary);
fileout.open("D:\\output.txt",ios::out|ios::binary);
if(filein==NULL)
{
cerr <<"filein 檔案開啟失敗" << endl;
exit(1);
}
if(fileout==NULL)
{
cerr << "fileout 檔案開啟失敗" << endl;
exit(2);
}
while(!filein.eof())//尚未到檔案尾端
{
//variable initialized
input_s.name ="";
input_s.gender="";
input_s.email="";
output_s ="";
// input string with filein fstream
filein >> input_s.name >> input_s.gender >> input_s.email;
cout <<"從檔案讀入資料: " << input_s.name << " "
<< input_s.gender << " "
<< input_s.email << endl;
// reset input_s.gender
if(input_s.gender.compare("男")==0)//如果是男
input_s.gender ="先生";
else //假設只有兩種性別的話
input_s.gender ="小姐";
//假設名字是中文
output_s +=input_s.name.substr(0,sizeof(wchar_t));
output_s +=input_s.gender;
output_s +=input_s.email;
cout <<"以輸入檔案資料 : " << output_s << endl;
fileout << output_s<<endl;
}// while end
filein.close();
fileout.close();
}//main end
以上再假設為format data的用fstream 存取
用這個方式要注意的是EOF需在最後一筆資料的尾端
以及 fstream 的<< operator每次輸入 只到前一whitespace (0x20)
這是小弟想到的解法
如有錯誤 請各位大大不吝指教 XD