使用标准模版库的流处理CSV文件

标准模版库中的文件流支持>>操作符号重载,可以方便的实现数据导入和类型转换,但是有一个比较弱智的限制就是输入的字符串只能用空格分割,不支持逗号分割,今天处理csv文件,用了一个比较龌龊的方法就是,将所有的逗号先替换为空格,然后导入,代码示意如下

  1. ifstream fRoad(szFile.c_str());
  2.  
  3. if (!fRoad)
  4. throw e_open_file_fail;
  5.  
  6. entities.clear();
  7.  
  8. char buffer[0xFF] = {0};
  9.  
  10. while (!fRoad.eof())
  11. {
  12. fRoad.getline(buffer, sizeof(buffer));
  13. string szLine=buffer;
  14. replace_if(szLine.begin(),szLine.end(), //range
  15. bind2nd(equal_to<char>(),','), ' ');
  16. istringstream ssLine(szLine);
  17. road_entity entity;
  18.  
  19. ssLine >> entity;
  20. .....
  21.  
  22. istringstream& operator>>(istringstream& ss, road_entity& e)
  23. {
  24. string szStation;
  25. ss >> szStation;//
  26. ss >> e.m_sName;
  27. ss >> e.m_bCode;
  28. ss >> e.m_bStartLine;
  29. ss >> e.m_bEndLine;
  30.  
  31. UINT bUp, bDown;
  32. ss >> bUp >> bDown;
  33.  
  34. e.m_UpDown=(RoadUpDown)bDown;
  35. UINT bIn, bOut;
  36. ss >> bIn >> bOut;
  37. e.m_InOut=(RoadInOut)bOut;
  38. return ss;
  39. }