MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / readLine

Method readLine

lib/external/csvreader.cc:5–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3#include "lib/external/csvreader.h"
4
5std::vector<std::string> CsvReader::readLine()
6{
7 enum state_t
8 {
9 UNQUOTED,
10 QUOTED,
11 QUOTEDQUOTE
12 };
13
14 std::vector<std::string> results;
15 std::string row;
16 std::getline(_istream, row);
17 if (_istream.bad() || _istream.fail())
18 return results;
19
20 results.push_back("");
21 state_t state = UNQUOTED;
22 size_t index = 0;
23 for (char c : row)
24 {
25 switch (state)
26 {
27 case UNQUOTED:
28 switch (c)
29 {
30 case ',':
31 results.push_back("");
32 index++;
33 break;
34
35 case '"':
36 state = QUOTED;
37 break;
38
39 default:
40 results[index].push_back(c);
41 break;
42 }
43 break;
44
45 case QUOTED:
46 switch (c)
47 {
48 case '"':
49 state = QUOTEDQUOTE;
50 break;
51
52 default:
53 results[index].push_back(c);
54 break;
55 }
56 break;
57
58 case QUOTEDQUOTE:
59 switch (c)
60 {
61 case ',':
62 results.push_back("");

Callers

nothing calls this directly

Calls 2

failMethod · 0.80
push_backMethod · 0.45

Tested by

no test coverage detected