comparison data/fileio/CSVStreamWriter.h @ 1835:804dd0c06f0e

Merge from branch sensible-delimited-data-strings
author Chris Cannam
date Mon, 06 Apr 2020 13:55:44 +0100
parents 21c792334c2e
children
comparison
equal deleted inserted replaced
1832:7c92c644db20 1835:804dd0c06f0e
18 18
19 #include "base/BaseTypes.h" 19 #include "base/BaseTypes.h"
20 #include "base/Selection.h" 20 #include "base/Selection.h"
21 #include "base/ProgressReporter.h" 21 #include "base/ProgressReporter.h"
22 #include "base/DataExportOptions.h" 22 #include "base/DataExportOptions.h"
23 #include "base/StringBits.h"
23 #include "data/model/Model.h" 24 #include "data/model/Model.h"
25
24 #include <QString> 26 #include <QString>
25 #include <algorithm> 27 #include <algorithm>
26 #include <numeric> 28 #include <numeric>
27 29
28 namespace CSVStreamWriter 30 namespace CSVStreamWriter
66 while (readPtr < endFrame) { 68 while (readPtr < endFrame) {
67 if (wasCancelled()) return false; 69 if (wasCancelled()) return false;
68 70
69 const auto start = readPtr; 71 const auto start = readPtr;
70 const auto end = std::min(start + blockSize, endFrame); 72 const auto end = std::min(start + blockSize, endFrame);
71 const auto data = model.toDelimitedDataString( 73 const auto data = model.toStringExportRows(
72 delimiter,
73 options, 74 options,
74 start, 75 start,
75 end - start 76 end - start
76 ).trimmed(); 77 );
77 78
78 if ( data != "" ) { 79 if (!data.empty()) {
79 if (started) { 80 for (const auto &row: data) {
80 oss << "\n"; 81 if (started) {
81 } else { 82 oss << "\n";
82 started = true; 83 } else {
84 started = true;
85 }
86 oss << StringBits::joinDelimited(row, delimiter);
83 } 87 }
84 oss << data;
85 } 88 }
86 89
87 nFramesWritten += end - start; 90 nFramesWritten += end - start;
88 const int currentProgress = 91 const int currentProgress =
89 int(100 * nFramesWritten / nFramesToWrite); 92 int(100 * nFramesWritten / nFramesToWrite);
118 startFrame, 121 startFrame,
119 endFrame 122 endFrame
120 }; 123 };
121 MultiSelection regions; 124 MultiSelection regions;
122 regions.addSelection(all); 125 regions.addSelection(all);
123 return CSVStreamWriter::writeInChunks( 126 return writeInChunks(
124 oss, 127 oss,
125 model, 128 model,
126 regions, 129 regions,
127 reporter, 130 reporter,
128 delimiter, 131 delimiter,
139 QString delimiter = ",", 142 QString delimiter = ",",
140 DataExportOptions options = DataExportDefaults, 143 DataExportOptions options = DataExportDefaults,
141 const sv_frame_t blockSize = 16384) 144 const sv_frame_t blockSize = 16384)
142 { 145 {
143 const Selection empty; 146 const Selection empty;
144 return CSVStreamWriter::writeInChunks( 147 return writeInChunks(
145 oss, 148 oss,
146 model, 149 model,
147 empty, 150 empty,
148 reporter, 151 reporter,
149 delimiter, 152 delimiter,