comparison data/model/BoxModel.h @ 1833:21c792334c2e sensible-delimited-data-strings

Rewrite all the DelimitedDataString stuff so as to return vectors of individual cell strings rather than having the classes add the delimiters themselves. Rename accordingly to names based on StringExport. Take advantage of this in the CSV writer code so as to properly quote cells that contain delimiter characters.
author Chris Cannam
date Fri, 03 Apr 2020 17:11:05 +0100
parents c546429d4c2f
children
comparison
equal deleted inserted replaced
1832:7c92c644db20 1833:21c792334c2e
346 options.levelAttributeName = "extent"; 346 options.levelAttributeName = "extent";
347 347
348 m_events.toXml(out, indent, QString("dimensions=\"2\""), options); 348 m_events.toXml(out, indent, QString("dimensions=\"2\""), options);
349 } 349 }
350 350
351 QString getDelimitedDataHeaderLine(QString delimiter, 351 QVector<QString>
352 DataExportOptions opts) const override { 352 getStringExportHeaders(DataExportOptions opts) const override {
353
353 QStringList list; 354 QStringList list;
354 355
355 // These are considered API rather than human-readable text - 356 // These are considered API rather than human-readable text -
356 // they shouldn't be translated 357 // they shouldn't be translated
357 358
361 list << "start" << "end"; 362 list << "start" << "end";
362 } 363 }
363 364
364 list << "extent start" << "extent end" << "label"; 365 list << "extent start" << "extent end" << "label";
365 366
366 return list.join(delimiter).toUpper(); 367 QVector<QString> sv;
367 } 368 for (QString s: list) {
368 369 sv.push_back(s.toUpper());
369 QString toDelimitedDataString(QString delimiter, 370 }
370 DataExportOptions opts, 371 return sv;
371 sv_frame_t startFrame, 372 }
372 sv_frame_t duration) const override { 373
374 QVector<QVector<QString>>
375 toStringExportRows(DataExportOptions opts,
376 sv_frame_t startFrame,
377 sv_frame_t duration) const override {
373 378
374 // We need a custom format here 379 // We need a custom format here
375 380
376 EventVector ee = m_events.getEventsSpanning(startFrame, duration); 381 EventVector ee = m_events.getEventsSpanning(startFrame, duration);
377 382
378 QString s; 383 QVector<QVector<QString>> rows;
379 384
380 for (auto e: ee) { 385 for (auto e: ee) {
381 386
382 QStringList list; 387 QVector<QString> list;
383 388
384 if (opts & DataExportWriteTimeInFrames) { 389 if (opts & DataExportWriteTimeInFrames) {
385 390
386 list << QString("%1").arg(e.getFrame()); 391 list << QString("%1").arg(e.getFrame());
387 list << QString("%1").arg(e.getFrame() + e.getDuration()); 392 list << QString("%1").arg(e.getFrame() + e.getDuration());
403 408
404 if (e.getLabel() != "") { 409 if (e.getLabel() != "") {
405 list << e.getLabel(); 410 list << e.getLabel();
406 } 411 }
407 412
408 s += list.join(delimiter) + "\n"; 413 rows.push_back(list);
409 } 414 }
410 415
411 return s; 416 return rows;
412 } 417 }
413 418
414 protected: 419 protected:
415 sv_samplerate_t m_sampleRate; 420 sv_samplerate_t m_sampleRate;
416 int m_resolution; 421 int m_resolution;