From kde-commits Thu Apr 30 21:06:28 2015 From: Stefan Gerlach Date: Thu, 30 Apr 2015 21:06:28 +0000 To: kde-commits Subject: [labplot] src/backend/datasources/filters: binary filter implementation continued Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=143042799614803 Git commit 9079b252782db30f534963772be45942e113febb by Stefan Gerlach. Committed on 30/04/2015 at 21:06. Pushed by sgerlach into branch 'master'. binary filter implementation continued M +17 -17 src/backend/datasources/filters/AsciiFilter.cpp M +21 -5 src/backend/datasources/filters/BinaryFilter.cpp M +13 -0 src/backend/datasources/filters/BinaryFilter.h M +3 -0 src/backend/datasources/filters/BinaryFilterPrivate.h http://commits.kde.org/labplot/9079b252782db30f534963772be45942e113febb diff --git a/src/backend/datasources/filters/AsciiFilter.cpp b/src/backend/= datasources/filters/AsciiFilter.cpp index ac02d96..22588b9 100644 --- a/src/backend/datasources/filters/AsciiFilter.cpp +++ b/src/backend/datasources/filters/AsciiFilter.cpp @@ -278,8 +278,8 @@ void AsciiFilterPrivate::read(const QString & fileName,= AbstractDataSource* data if ( !file.exists() ) return; = - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - return; + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return; = QTextStream in(&file); = @@ -304,9 +304,9 @@ void AsciiFilterPrivate::read(const QString & fileName,= AbstractDataSource* data } = //parse the first row: - //use the first row to determine the number of columns, + //use the first row to determine the number of columns, //create the columns and use (optionaly) the first row to name them - if( in.atEnd() ) { + if( in.atEnd() ) { if (mode=3D=3DAbstractFileFilter::Replace) { //file with no data to be imported. In replace-mode clear the spreadshe= et this->clearDataSource(dataSource); @@ -317,7 +317,7 @@ void AsciiFilterPrivate::read(const QString & fileName,= AbstractDataSource* data line =3D in.readLine(); if( simplifyWhitespacesEnabled) line =3D line.simplified(); - + = QString separator; if( separatingCharacter =3D=3D "auto" ){ QRegExp regExp("(\\s+)|(,\\s+)|(;\\s+)|(:\\s+)"); @@ -329,15 +329,15 @@ void AsciiFilterPrivate::read(const QString & fileNam= e, AbstractDataSource* data if (lineStringList.size()>1){ int pos2 =3D line.indexOf(lineStringList.at(1)); separator =3D line.mid(length1, pos2-length1); - }else{ + }else { separator =3D line.right(line.length()-length1); - } - } - }else{ - separator =3D separatingCharacter.replace(QString("TAB"), QString("\t")= , Qt::CaseInsensitive); - separator =3D separatingCharacter.replace(QString("SPACE"), QString(" "= ), Qt::CaseInsensitive); - lineStringList =3D line.split( separator, QString::SplitBehavior(skipEm= ptyParts) ); - } + } + } + }else { + separator =3D separatingCharacter.replace(QString("TAB"), QString("\t"),= Qt::CaseInsensitive); + separator =3D separatingCharacter.replace(QString("SPACE"), QString(" ")= , Qt::CaseInsensitive); + lineStringList =3D line.split( separator, QString::SplitBehavior(skipEmp= tyParts) ); + } // qDebug() << "separator '"<completed(100*currentRow/numLines); - } + } = - //set the comments for each of the columns - //TODO: generalize to different data types - QString comment; + //set the comments for each of the columns + //TODO: generalize to different data types + QString comment; if (headerEnabled) comment =3D i18np("numerical data, %1 element", "numerical data, %1 elem= ents", currentRow); else diff --git a/src/backend/datasources/filters/BinaryFilter.cpp b/src/backend= /datasources/filters/BinaryFilter.cpp index e4872c4..8a96412 100644 --- a/src/backend/datasources/filters/BinaryFilter.cpp +++ b/src/backend/datasources/filters/BinaryFilter.cpp @@ -98,7 +98,7 @@ BinaryFilter::ByteOrder BinaryFilter::byteOrder() const{ //##################################################################### = BinaryFilterPrivate::BinaryFilterPrivate(BinaryFilter* owner) : = - q(owner), dataFormat(BinaryFilter::UINT16), byteOrder(BinaryFilter::Littl= eEndian) { + q(owner), dataFormat(BinaryFilter::UINT16), byteOrder(BinaryFilter::Littl= eEndian), startByte(0), endByte(-1) { } = /*! @@ -106,10 +106,26 @@ BinaryFilterPrivate::BinaryFilterPrivate(BinaryFilter= * owner) : Uses the settings defined in the data source. */ void BinaryFilterPrivate::read(const QString & fileName, AbstractDataSourc= e* dataSource, AbstractFileFilter::ImportMode mode){ - Q_UNUSED(fileName); - Q_UNUSED(dataSource); - Q_UNUSED(mode); - //TODO + Q_UNUSED(dataSource); + Q_UNUSED(mode); + = + QFile file(fileName); + if ( !file.exists() ) + return; + + if (!file.open(QIODevice::ReadOnly)) + return; + + QDataStream in(&file); + + //TODO: skip bytes, if required + // if number of bytes is bigger than file ... + for (int i=3D0; i> tmp; + } + + //TODO: see AsciiFilterPrivate::read() } = /*! diff --git a/src/backend/datasources/filters/BinaryFilter.h b/src/backend/d= atasources/filters/BinaryFilter.h index 0848dd8..5f8ab5d 100644 --- a/src/backend/datasources/filters/BinaryFilter.h +++ b/src/backend/datasources/filters/BinaryFilter.h @@ -49,7 +49,20 @@ class BinaryFilter : public AbstractFileFilter{ = BinaryFilter::DataFormat dataFormat() const; BinaryFilter::ByteOrder byteOrder() const; + = + void setStartByte(const int); + int startByte() const; = + void setEndByte(const int); + int endByte() const; + +//TODO: or use start/end row? +/* void setStartRow(const int); + int startRow() const; + + void setEndRow(const int); + int endRow() const; +*/ private: BinaryFilterPrivate* const d; friend class BinaryFilterPrivate; diff --git a/src/backend/datasources/filters/BinaryFilterPrivate.h b/src/ba= ckend/datasources/filters/BinaryFilterPrivate.h index f018974..9cebf15 100644 --- a/src/backend/datasources/filters/BinaryFilterPrivate.h +++ b/src/backend/datasources/filters/BinaryFilterPrivate.h @@ -44,6 +44,9 @@ class BinaryFilterPrivate { BinaryFilter::DataFormat dataFormat; BinaryFilter::ByteOrder byteOrder; = + int startByte; + int endByte; + private: void clearDataSource(AbstractDataSource*) const; };