CSV文件作为一种简单易用的信息存储文件,有着非常广泛的用途,在游戏开发行业的应用尤为普遍,它比普通ini文件记录信息更加方便,具有更加严谨的格式信息,同时又没有数据库存储数据那么复杂。
它的记录形式通常以逗号为字段间分隔符,以回车为每条记录间分割符的简单文本格式,通过Excel打开如下所示:
通过普通通文本编辑器打开,如下图所示:
通过上面的图示,可知csv记录的信息实际上就是一个二维信息集,所以第一步应该是有一个将csv文件转换成二维信息集的类,如下:
#ifndef _CSV_FILE_
#define _CSV_FILE_
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
typedef vector< string > VecString;
typedef vector< VecString > MatrixString;
class CVSFile
{
public:
CVSFile();
//以文件名初始化表格数据
bool Init(const char* szFileName, char cSpliteToken = ',');
//以指定分隔符从一行数据中获取关键字列表
bool Splite(const string& strLine, VecString& vecString);
private:
// 检测读出的数据是否合法
bool _CheckDataValid();
protected:
MatrixString m_content;
char m_cSpliteToken;
};
#endif
#include "CVSFile.h"
CVSFile::CVSFile()
{
m_content.clear();
}
bool CVSFile::Init( const char* szFileName, char cSpliteToken)
{
ifstream inFile(szFileName);
if (!inFile)
{
return false;
}
//获取分隔符
m_cSpliteToken = cSpliteToken;
// 每次读取一行文本内容直至文件结尾
string strLineContext;
while (getline(inFile, strLineContext))
{
// 以指定分隔符获取每行信息列表
VecString vecValue;
Splite(strLineContext, vecValue);
m_content.push_back(vecValue);
}
// 检验数据是否符合要求
if (!_CheckDataValid())
{
return false;
}
return true;
}
bool CVSFile::Splite( const string& strLine, VecString&