2014-02-07 103 views
1

我正在尝试使用一个简单的CSV文件,逐行分割并将其打印到控制台。目前我在编译时遇到错误,并想知道我是否缺少明显的东西。在C++中格式化CSV文件

#include <fstream> 
#include <iostream> 
#include <sstream> 
#include <string> 

int main(int argc , char** argv) { 

    std::string line; 
    std::ifstream infile(argv[1]); 

    if (infile) { 

     while (getline(infile, line)) { 

      std::istringstream ss(line); 
      std::string token; 

      while(std::getline(ss, token, ",")) { 

       std::cout << token << "\n"; 

      } 

     } 

    } 

    infile.close(); 
    return 0; 

} 

我得到的错误如下。

csv.cpp: In function 'int main(int, char**)': 
csv.cpp:41:46: error: no matching function for call to 'getline(std::istringstream&, 
std::string&, const char [2])' 
csv.cpp:41:46: note: candidates are: 
In file included from /usr/include/c++/4.7/string:55:0, 
      from /usr/include/c++/4.7/bits/locale_classes.h:42, 
      from /usr/include/c++/4.7/bits/ios_base.h:43, 
      from /usr/include/c++/4.7/ios:43, 
      from /usr/include/c++/4.7/istream:40, 
      from /usr/include/c++/4.7/fstream:40, 
      from csv.cpp:21: 
/usr/include/c++/4.7/bits/basic_string.tcc:1070:5: note: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&, _CharT) 
/usr/include/c++/4.7/bits/basic_string.tcc:1070:5: note: template argument deduction/substitution failed: 
csv.cpp:41:46: note: deduced conflicting types for parameter '_CharT' ('char' and 'const char*') 
In file included from /usr/include/c++/4.7/string:54:0, 
      from /usr/include/c++/4.7/bits/locale_classes.h:42, 
      from /usr/include/c++/4.7/bits/ios_base.h:43, 
      from /usr/include/c++/4.7/ios:43, 
      from /usr/include/c++/4.7/istream:40, 
      from /usr/include/c++/4.7/fstream:40, 
      from csv.cpp:21: 
/usr/include/c++/4.7/bits/basic_string.h:2792:5: note: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&) 
/usr/include/c++/4.7/bits/basic_string.h:2792:5: note: template argument deduction/substitution failed: 
csv.cpp:41:46: note: candidate expects 2 arguments, 3 provided 
+0

我读了那个帖子,对我来说根本没有意义。 – user2941520

+0

在看到伊戈尔的回答后,我意识到另一个线索可能与您的问题无关 - 我已经收回了近距离投票。 –

回答

3

getline第三个参数是一个char,而不是一个char*。做它getline(ss, token, ',') - 注意单引号。

呵呵,小心CSV字段"like"",""this"(如果您想知道,这是一个值为like","this的单个字段)。还有更多的CSV语法不符合要求。