From: Peter Hedlund Date: Wed, 21 Feb 2007 22:35:14 +0000 (+0000) Subject: A simple import filter for delimited text. X-Git-Tag: v3.90.1~82 X-Git-Url: https://git.rmz.fi/?a=commitdiff_plain;h=295eaf943ad0f6fd89d971e5be6a6ab0366bdd4f;p=libqmvoc.git A simple import filter for delimited text. svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=636100 --- diff --git a/kdeeducore/CMakeLists.txt b/kdeeducore/CMakeLists.txt index 56ab428..e61d7e9 100644 --- a/kdeeducore/CMakeLists.txt +++ b/kdeeducore/CMakeLists.txt @@ -2,6 +2,7 @@ ########### next target ############### set(kdeeducore_LIB_SRCS + keduvoccsvreader.cpp keduvocdocument.cpp keduvocexpression.cpp keduvocgrammar.cpp @@ -35,6 +36,7 @@ install(TARGETS kdeeducore DESTINATION ${LIB_INSTALL_DIR} ) install(FILES libkdeedu_core_export.h + keduvoccsvreader.h keduvocdocument.h keduvocexpression.h keduvocgrammar.h diff --git a/kdeeducore/keduvoccsvreader.cpp b/kdeeducore/keduvoccsvreader.cpp new file mode 100644 index 0000000..4c644a1 --- /dev/null +++ b/kdeeducore/keduvoccsvreader.cpp @@ -0,0 +1,71 @@ +/*************************************************************************** + + create a KEduVocDocument from a text file + + ----------------------------------------------------------------------- + + begin : Sat Sep 06 11:00:53 MET 1999 + + copyright : (C) 1999-2001 Ewald Arnold + (C) 2001 The KDE-EDU team + (C) 2005, 2007 Peter Hedlund + + ----------------------------------------------------------------------- + + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include + +#include + +#include "keduvocdocument.h" +#include "keduvoccsvreader.h" + +KEduVocCsvReader::KEduVocCsvReader(QIODevice *file) +{ + // the file must be already open + m_inputFile = file; + m_errorMessage = ""; +} + + +bool KEduVocCsvReader::readDoc(KEduVocDocument *doc) +{ + m_doc = doc; + + QString separator = QString(","); + + QTextStream inputStream(m_inputFile); + inputStream.setCodec("UTF-8"); + inputStream.setAutoDetectUnicode(true); + inputStream.seek(0); + + int languageCount = 0; + + while (!inputStream.atEnd()) { + QString s = inputStream.readLine(); + + if (!s.simplified().isEmpty()) { + KEduVocExpression expression(s, separator); + languageCount = qMax(languageCount, expression.numTranslations() + 1); + m_doc->appendEntry(&expression); + } + } + + for (int j = 0; j < languageCount; j++) + if (j == 0) + m_doc->appendIdentifier(i18n("Original")); + else + m_doc->appendIdentifier(i18n("Translation %1", j)); + + return true; +} diff --git a/kdeeducore/keduvoccsvreader.h b/kdeeducore/keduvoccsvreader.h new file mode 100644 index 0000000..6386fa5 --- /dev/null +++ b/kdeeducore/keduvoccsvreader.h @@ -0,0 +1,41 @@ +/*************************************************************************** + create a KEduVocDocument from a text file + ----------------------------------------------------------------------- + copyright : (C) 2007 Peter Hedlund + + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef KEDUVOCCSVREADER_H +#define KEDUVOCCSVREADER_H + +#include + +#include + +class KEduVocDocument; + +class KDEEDUCORE_EXPORT KEduVocCsvReader : public QObject +{ +public: + KEduVocCsvReader(QIODevice *file); + + bool readDoc(KEduVocDocument *doc); + + QString errorMessage() const {return m_errorMessage;}; + +private: + QIODevice *m_inputFile; + KEduVocDocument *m_doc; + QString m_errorMessage; +}; + +#endif diff --git a/kdeeducore/keduvocdocument.cpp b/kdeeducore/keduvocdocument.cpp index 18f3a16..90ff461 100644 --- a/kdeeducore/keduvocdocument.cpp +++ b/kdeeducore/keduvocdocument.cpp @@ -32,6 +32,7 @@ #include #include "keduvockvtmlwriter.h" +#include "keduvoccsvreader.h" #include "keduvockvtmlreader.h" #include "keduvocwqlwriter.h" #include "keduvocwqlreader.h" @@ -126,7 +127,6 @@ void KEduVocDocument::Init () KEduVocDocument::FileType KEduVocDocument::detectFileType(const QString &fileName) { QIODevice * f = KFilterDev::deviceForFile(fileName); - //QFile f(fileName); if (!f->open(QIODevice::ReadOnly)) return csv; @@ -185,9 +185,8 @@ bool KEduVocDocument::open(const KUrl& url, bool /*append*/) QString temporaryFile; if (KIO::NetAccess::download(url, temporaryFile, 0)) { - ///@todo We need to work with the QIODevice directly for the compressed Pauker files QIODevice * f = KFilterDev::deviceForFile(temporaryFile); - //QFile f(temporaryFile); + if (!f->open(QIODevice::ReadOnly)) { KMessageBox::error(0, errorMessage); @@ -236,8 +235,10 @@ bool KEduVocDocument::open(const KUrl& url, bool /*append*/) case csv: { - //QTextStream is(&f); - //TODO read = loadFromCsv(is); + KEduVocCsvReader csvReader(f); + read = csvReader.readDoc(this); + if (!read) + errorMessage = csvReader.errorMessage(); } break; diff --git a/kdeeducore/keduvocpaukerreader.cpp b/kdeeducore/keduvocpaukerreader.cpp index ee4d330..a79e5d3 100644 --- a/kdeeducore/keduvocpaukerreader.cpp +++ b/kdeeducore/keduvocpaukerreader.cpp @@ -49,6 +49,7 @@ bool KEduVocPaukerReader::readDoc(KEduVocDocument * doc) return false; } + m_doc->setAuthor("http://pauker.sf.net"); ///Pauker does not provide any column titles m_doc->appendIdentifier(i18n("Front Side")); m_doc->appendIdentifier(i18n("Reverse Side"));