const int LIST_INCREMENT = 100;
ifstream infile(messageFilePath.c_str());
boost::regex pat( "^\\d{4}/\\d{1,2}/\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}" );
boost::smatch matches;
std::string line; // 首先统计消息条数
int messageCount = 0;
while(getline(infile,line))
if(boost::regex_search(line,matches, pat))
messageCount++;
//cout<<"Message Total:"<<messageCount<<endl;
//cout<<"Press enter to continue..."; cin.get();
// 清除流状态
infile.clear();
// 重新定位
infile.seekg(0,ios::beg);
int messageNo = 0;
messageList.reserve(LIST_INCREMENT);
messageList.clear();
string singleMessageText;
// 首先找到第一个条目,getline不处理空行?
while(getline(infile,line)&&!boost::regex_search(line,matches, pat)) {};
// 找到第一个条目后
while(!infile.eof())
{
// 新的条目
++messageNo;
// 日期和昵称
string strDate(matches[0]);
string strName = line.substr(strDate.length()+1);
// 消息文本,直到找到下一条目或者遇到文件尾
singleMessageText = "";
while(getline(infile,line)&&!boost::regex_search(line,matches, pat))
{
singleMessageText = singleMessageText + line + "\n";
}
// 更新数据集
messageList.push_back(MessageEntry(strDate,strName,singleMessageText));
}
// 输出结果
//std::copy(messageList.begin(),messageList.end(),ostream_iterator<MessageEntry>(cout,"\n"));