v2.0.0
Loading...
Searching...
No Matches
bids_tsv.cpp
Go to the documentation of this file.
1//=============================================================================================================
12
13//=============================================================================================================
14// INCLUDES
15//=============================================================================================================
16
17#include "bids_tsv.h"
18
19//=============================================================================================================
20// QT INCLUDES
21//=============================================================================================================
22
23#include <QFile>
24#include <QTextStream>
25#include <QDebug>
26
27//=============================================================================================================
28// USED NAMESPACES
29//=============================================================================================================
30
31using namespace BIDSLIB;
32
33//=============================================================================================================
34// STATIC HELPERS
35//=============================================================================================================
36
37static const QString NA = QStringLiteral("n/a");
38
39static QString valOrNA(const QString& s)
40{
41 return s.isEmpty() ? NA : s;
42}
43
44//=============================================================================================================
45// DEFINE MEMBER METHODS
46//=============================================================================================================
47
51
52//=============================================================================================================
53
57
58//=============================================================================================================
59
60QList<BidsTsvRow> BidsTsv::readTsv(const QString& sFilePath,
61 QStringList& headers)
62{
63 QList<BidsTsvRow> rows;
64 headers.clear();
65
66 QFile file(sFilePath);
67 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
68 qWarning() << "[BidsTsv::readTsv] Cannot open" << sFilePath;
69 return rows;
70 }
71
72 QTextStream in(&file);
73 bool firstLine = true;
74
75 while(!in.atEnd()) {
76 QString line = in.readLine().trimmed();
77 if(line.isEmpty())
78 continue;
79
80 QStringList fields = line.split(QLatin1Char('\t'));
81
82 if(firstLine) {
83 headers = fields;
84 firstLine = false;
85 continue;
86 }
87
88 BidsTsvRow row;
89 for(int i = 0; i < headers.size() && i < fields.size(); ++i) {
90 row[headers[i]] = fields[i];
91 }
92 rows.append(row);
93 }
94
95 file.close();
96 return rows;
97}
98
99//=============================================================================================================
100
101bool BidsTsv::writeTsv(const QString& sFilePath,
102 const QStringList& headers,
103 const QList<BidsTsvRow>& rows)
104{
105 QFile file(sFilePath);
106 if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
107 qWarning() << "[BidsTsv::writeTsv] Cannot open" << sFilePath << "for writing";
108 return false;
109 }
110
111 QTextStream out(&file);
112
113 // Header row
114 out << headers.join(QLatin1Char('\t')) << QLatin1Char('\n');
115
116 // Data rows
117 for(const auto& row : rows) {
118 QStringList fields;
119 fields.reserve(headers.size());
120 for(const auto& header : headers) {
121 fields << valOrNA(row.value(header));
122 }
123 out << fields.join(QLatin1Char('\t')) << QLatin1Char('\n');
124 }
125
126 file.close();
127 return true;
128}
Generic tab-separated-value reader/writer for BIDS sidecars (UTF-8, LF, n/a for missing values,...
BIDS dataset reading, writing, path construction, and sidecar metadata handling for iEEG/EEG/MEG.
QMap< QString, QString > BidsTsvRow
Definition bids_tsv.h:54
static QList< BidsTsvRow > readTsv(const QString &sFilePath, QStringList &headers)
Definition bids_tsv.cpp:60
static bool writeTsv(const QString &sFilePath, const QStringList &headers, const QList< BidsTsvRow > &rows)
Definition bids_tsv.cpp:101