代码改变世界

C++ 解析CSV文件

2016-04-20 11:11  sylar_liang  阅读(2048)  评论(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);

      }

    }

  }

  

}