Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <iomanip>
  4. #include <vector>
  5. #include <string>
  6. #include <exception>
  7. #include <algorithm>
  8.  
  9. class CSVParser
  10. {
  11. char separator,quote_mark;
  12. std::string getLine()
  13. {
  14. std::string s;
  15. std::stringstream ss;
  16. getline(input,s);
  17. int nrOfQuotes = std::count(s.begin(),s.end(),this->quote_mark);
  18. ss<<s;
  19. while(nrOfQuotes%2)
  20. {
  21. ss<<"\n";
  22. getline(input,s);
  23. nrOfQuotes += std::count(s.begin(),s.end(),this->quote_mark);
  24. ss<<s;
  25. }
  26.  
  27. if (nrOfQuotes%2)
  28. throw std::invalid_argument("Wrong qouting order");
  29. return ss.str();
  30. }
  31. public:
  32. std::stringstream input;
  33.  
  34. CSVParser(char _separator=',',char _quote_mark='"') : separator(_separator), quote_mark(_quote_mark) {}
  35. bool readRecord(std::vector<std::string>& result)
  36. {
  37. result.push_back(getLine());
  38. std::string
  39. /*
  40. while (input.peek() != '\n')
  41. {
  42. std::string csvElement;
  43. std::cout << (int)input.peek()<<std::endl;
  44.  
  45. if (input.peek() == '"')
  46. {
  47. input >> std::quoted(csvElement,'"');
  48. }else
  49. {
  50. std::getline(input, csvElement, ',');
  51. }
  52. result.push_back(csvElement);
  53. }*/
  54. return !result.empty();
  55. }
  56. };
  57.  
  58. int main()
  59. {
  60. //input
  61. std::stringstream test1("a,b,\"c\nd\"");
  62. std::stringstream test11("a,b,\"c");
  63.  
  64.  
  65. std::stringstream test2("a\nb");
  66. std::stringstream test3("a;'b\nc';'c';''''");
  67. std::stringstream test4("\"a\",\"b\nc\",\"c\"\n\"d\"");
  68. std::stringstream test5("\"a\",\"b\nc\",\"c\"\n\"d\"");
  69. std::stringstream test6("\"a\",\"b\nc\",\"c\"\n\"d\"");
  70.  
  71. // result
  72. std::vector<std::string> result;
  73.  
  74. CSVParser parser(';','"');
  75. parser.input << test4.str();
  76.  
  77. //while(parser.readRecord(result))
  78. parser.readRecord(result);
  79. {
  80. std::cout << result.size() << std::endl;
  81. for(auto& s : result)
  82. std::cout << s << ",";
  83. result.clear();
  84. }
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement