C++ 解析CSV文件
2016-04-20 11:11 sylar_liang 阅读(2074) 评论(0) 编辑 收藏 举报1.XCFileStream的ReadData基本能用,需要加个 if(__ptr == '\0') break 的判断。(此时字符集为 未设置,假如是unicode编译不过)
WriteData 已做测试,可用。只能写入xxx.csv文件,不能直接写入Excel文件,Excel文件需要Office接口才能写.
优化:可以只读某几行的内容。
注意:
在简体中文环境下,EXCEL打开的CSV文件默认是ANSI编码,如果CSV文件的编码方式为utf-8、Unicode等编码可能就会出现文件乱码的情况。
2.读取配置文件内容
配置文件内容如下:
[COLOR]
TOOLBAR_BG = "#ABCDEF"
dlgback = 2000
TCHAR szFileName[256];
::GetModuleFileName(NULL, szFileName, 256);
CString strFileName = szFileName;
strFileName.Replace(".exe", ".ini");
TCHAR cBuf[32] = {0};
CString strContent;
int num = 0;
//读取字符串
num = ::GetPrivateProfileString("COLOR", "TOOLBAR_BG", "D8E9EC", cBuf, sizeof(cBuf), strFileName);
strContent = cBuf;
//读取数字
int color = ::GetPrivateProfileInt("COLOR", "dlgbak", "12345", strFileName);
3.获取指定文件夹中的所有文件名(递归获取)
1>弹出 选择文件夹对话框,获取到文件夹路径
2>朴素贝叶斯算法
void BayesCategoryTest(CString tp)
{
CString szPath = tp;
szPath += _T("\\*.*"); //搜索所有文件,假如是想只搜索本级目录下的csv,则改为*.csv
CFileFind fd;
BOOL bFind = fd.FindFile(szPath);
while(bFind)
{
bFind = fd.FindNextFile();
if (fd.IsDirectory() && !fd.IsDots()) //是目录则递归
{
BayesCategory(fd.GetFilePath());
}
else //再判断是否为*.csv文件
{
CString fileName = fd.GetFileName();
int dotPos = fileName.ReverseFind('.');
CString fileExt = fileName.Right(fileName.GetLength() - dotPos);
if (fileExt == _T(".csv")) //若是csv文件,则保存在vector中
{
m_vecStr.push_back(fileName);
}
}
}
}