blob: 752b2e881587c44e9fad3da2e15740e3e0e1f6e7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
//
// Copyright 2011 Ettus Research LLC
// Copyright 2018 Ettus Research, a National Instruments Company
//
// SPDX-License-Identifier: GPL-3.0-or-later
//
#include <uhd/utils/csv.hpp>
using namespace uhd;
csv::rows_type csv::to_rows(std::istream& input)
{
csv::rows_type rows;
std::string line;
// for each line in the input stream
while (std::getline(input, line)) {
csv::row_type row(1, "");
bool in_quote = false;
char last_ch, next_ch = ' ';
// for each character in the line
for (char ch : line) {
last_ch = next_ch;
next_ch = ch;
// catch a quote character and change the state
// we handle double quotes by checking last_ch
if (ch == '"') {
in_quote = not in_quote;
if (last_ch != '"')
continue;
}
// a comma not inside quotes is a column delimiter
if (not in_quote and ch == ',') {
row.push_back("");
continue;
}
// if we got here we record the character
row.back() += ch;
}
rows.push_back(row);
}
return rows;
}
|