File: csv.cpp

package info (click to toggle)
uhd 4.8.0.0%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 183,172 kB
  • sloc: cpp: 279,415; python: 109,850; ansic: 103,348; vhdl: 57,230; tcl: 20,007; xml: 8,581; makefile: 2,863; sh: 2,797; pascal: 230; javascript: 120; csh: 94; asm: 20; perl: 11
file content (43 lines) | stat: -rw-r--r-- 1,221 bytes parent folder | download | duplicates (3)
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;
}