diff --git a/src/asciireader.cpp b/src/asciireader.cpp
--- a/src/asciireader.cpp
+++ b/src/asciireader.cpp
@@ -33,6 +33,7 @@ AsciiReader::AsciiReader(QIODevice* devi
_numOfChannels = _settingsWidget.numOfChannels();
autoNumOfChannels = (_numOfChannels == NUMOFCHANNELS_AUTO);
+ delimiter = _settingsWidget.delimiter();
connect(&_settingsWidget, &AsciiReaderSettings::numOfChannelsChanged,
[this](unsigned value)
@@ -45,6 +46,12 @@ AsciiReader::AsciiReader(QIODevice* devi
}
});
+ connect(&_settingsWidget, &AsciiReaderSettings::delimiterChanged,
+ [this](QChar d)
+ {
+ delimiter = d;
+ });
+
connect(device, &QIODevice::aboutToClose, [this](){discardFirstLine=true;});
}
@@ -90,7 +97,7 @@ void AsciiReader::onDataReady()
{
while(_device->canReadLine())
{
- QByteArray line = _device->readLine();
+ QString line = QString(_device->readLine());
// discard only once when we just started reading
if (discardFirstLine)
@@ -116,7 +123,7 @@ void AsciiReader::onDataReady()
continue;
}
- auto separatedValues = line.split(',');
+ auto separatedValues = line.split(delimiter, QString::SkipEmptyParts);
unsigned numReadChannels; // effective number of channels to read
unsigned numComingChannels = separatedValues.length();
@@ -143,6 +150,7 @@ void AsciiReader::onDataReady()
}
// parse read line
+ unsigned numDataBroken = 0;
double* channelSamples = new double[_numOfChannels]();
for (unsigned ci = 0; ci < numReadChannels; ci++)
{
@@ -153,6 +161,7 @@ void AsciiReader::onDataReady()
qWarning() << "Data parsing error for channel: " << ci;
qWarning() << "Read line: " << line;
channelSamples[ci] = 0;
+ numDataBroken++;
}
}
diff --git a/src/asciireader.h b/src/asciireader.h
--- a/src/asciireader.h
+++ b/src/asciireader.h
@@ -48,6 +48,7 @@ private:
unsigned _numOfChannels;
/// number of channels will be determined from incoming data
unsigned autoNumOfChannels;
+ QChar delimiter; ///< selected column delimiter
bool paused;
// We may have (usually true) started reading in the middle of a
diff --git a/src/asciireadersettings.cpp b/src/asciireadersettings.cpp
--- a/src/asciireadersettings.cpp
+++ b/src/asciireadersettings.cpp
@@ -1,5 +1,5 @@
/*
- Copyright © 2016 Hasan Yavuz Özderya
+ Copyright © 2017 Hasan Yavuz Özderya
This file is part of serialplot.
@@ -17,20 +17,35 @@
along with serialplot. If not, see .
*/
+#include
+#include
+
#include "utils.h"
#include "setting_defines.h"
#include "asciireadersettings.h"
#include "ui_asciireadersettings.h"
-#include
-
AsciiReaderSettings::AsciiReaderSettings(QWidget *parent) :
QWidget(parent),
ui(new Ui::AsciiReaderSettings)
{
ui->setupUi(this);
+ auto validator = new QRegularExpressionValidator(QRegularExpression("[^\\d]?"), this);
+ ui->leDelimiter->setValidator(validator);
+
+ connect(ui->rbComma, &QAbstractButton::toggled,
+ this, &AsciiReaderSettings::delimiterToggled);
+ connect(ui->rbSpace, &QAbstractButton::toggled,
+ this, &AsciiReaderSettings::delimiterToggled);
+ connect(ui->rbTab, &QAbstractButton::toggled,
+ this, &AsciiReaderSettings::delimiterToggled);
+ connect(ui->rbOtherDelimiter, &QAbstractButton::toggled,
+ this, &AsciiReaderSettings::delimiterToggled);
+ connect(ui->leDelimiter, &QLineEdit::textChanged,
+ this, &AsciiReaderSettings::customDelimiterChanged);
+
// Note: if directly connected we get a runtime warning on incompatible signal arguments
connect(ui->spNumOfChannels, SELECT::OVERLOAD_OF(&QSpinBox::valueChanged),
[this](int value)
@@ -44,11 +59,51 @@ AsciiReaderSettings::~AsciiReaderSetting
delete ui;
}
-unsigned AsciiReaderSettings::numOfChannels()
+unsigned AsciiReaderSettings::numOfChannels() const
{
return ui->spNumOfChannels->value();
}
+QChar AsciiReaderSettings::delimiter() const
+{
+ if (ui->rbComma->isChecked())
+ {
+ return QChar(',');
+ }
+ else if (ui->rbSpace->isChecked())
+ {
+ return QChar(' ');
+ }
+ else if (ui->rbTab->isChecked())
+ {
+ return QChar('\t');
+ }
+ else // rbOther
+ {
+ auto t = ui->leDelimiter->text();
+ return t.isEmpty() ? QChar() : t.at(0);
+ }
+}
+
+void AsciiReaderSettings::delimiterToggled(bool checked)
+{
+ if (!checked) return;
+
+ auto d = delimiter();
+ if (!d.isNull())
+ {
+ emit delimiterChanged(d);
+ }
+}
+
+void AsciiReaderSettings::customDelimiterChanged(const QString text)
+{
+ if (ui->rbOtherDelimiter->isChecked())
+ {
+ if (!text.isEmpty()) emit delimiterChanged(text.at(0));
+ }
+}
+
void AsciiReaderSettings::saveSettings(QSettings* settings)
{
settings->beginGroup(SettingGroup_ASCII);
diff --git a/src/asciireadersettings.h b/src/asciireadersettings.h
--- a/src/asciireadersettings.h
+++ b/src/asciireadersettings.h
@@ -1,5 +1,5 @@
/*
- Copyright © 2016 Hasan Yavuz Özderya
+ Copyright © 2017 Hasan Yavuz Özderya
This file is part of serialplot.
@@ -22,6 +22,7 @@
#include
#include
+#include
namespace Ui {
class AsciiReaderSettings;
@@ -35,7 +36,8 @@ public:
explicit AsciiReaderSettings(QWidget *parent = 0);
~AsciiReaderSettings();
- unsigned numOfChannels();
+ unsigned numOfChannels() const;
+ QChar delimiter() const;
/// Stores settings into a `QSettings`
void saveSettings(QSettings* settings);
/// Loads settings from a `QSettings`.
@@ -43,9 +45,15 @@ public:
signals:
void numOfChannelsChanged(unsigned);
+ /// Signaled only with a valid delimiter
+ void delimiterChanged(QChar);
private:
Ui::AsciiReaderSettings *ui;
+
+private slots:
+ void delimiterToggled(bool checked);
+ void customDelimiterChanged(const QString text);
};
#endif // ASCIIREADERSETTINGS_H
diff --git a/src/asciireadersettings.ui b/src/asciireadersettings.ui
--- a/src/asciireadersettings.ui
+++ b/src/asciireadersettings.ui
@@ -6,14 +6,17 @@
0
0
- 414
+ 493
171
Form
-
+
+
+ QFormLayout::ExpandingFieldsGrow
+
0
@@ -26,68 +29,105 @@
0
- -
+
-
+
+
+ Number Of Channels:
+
+
+
+ -
+
+
+
+ 60
+ 0
+
+
+
+ Select number of channels or set to 0 for Auto (determined from incoming data)
+
+
+ Auto
+
+
+ false
+
+
+ 0
+
+
+ 32
+
+
+
+ -
+
+
+ Column Delimiter:
+
+
+
+ -
-
-
+
- Number Of Channels:
+ comma
+
+
+ true
-
-
-
-
- 60
- 0
-
-
-
- Select number of channels or set to 0 for Auto (determined from incoming data)
+
+
+ space
-
- Auto
-
-
- false
+
+
+ -
+
+
+ tab
-
- 0
-
-
- 32
+
+
+ -
+
+
+ other:
-
-
-
- Qt::Horizontal
+
+
+
+ 0
+ 0
+
-
+
- 1
- 20
+ 30
+ 16777215
-
+
+ Enter a custom delimiter character
+
+
+
+
+
+ |
+
+
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 1
-
-
-
-