diff options
| author | 2015-04-19 22:30:43 -0400 | |
|---|---|---|
| committer | 2015-04-19 22:30:43 -0400 | |
| commit | 094918f048c81474b22f9ba2940c96dc4033d753 (patch) | |
| tree | 2b89c77ad7dc9c55e9ba383f23f9f25b82df358e /SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp | |
| parent | 640fff60ceecde402131937dddb3458f7a003e9c (diff) | |
| parent | a308f430f694423064ebc86fd0506c8c6fdb3d93 (diff) | |
Merge tag 'upstream/3.0.5'
Upstream version 3.0.5
# gpg: Signature made Sun 19 Apr 2015 10:30:41 PM EDT using RSA key ID EBE9BD91
# gpg: Good signature from "Unit 193 <unit193@gmail.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.org>"
# gpg: aka "Unit 193 <unit193@ubuntu.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.com>"
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp')
| -rw-r--r-- | SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp | 87 |
1 files changed, 83 insertions, 4 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp index 3672527..7d7d20b 100644 --- a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp @@ -35,16 +35,17 @@ QString CsvSerializer::serialize(const QStringList& data, const CsvFormat& forma return outputCells.join(format.columnSeparator); } -QList<QStringList> CsvSerializer::deserialize(const QString& data, const CsvFormat& format) +template <class T> +QList<QList<T>> typedDeserialize(const T& data, const CsvFormat& format) { - QList<QStringList> rows; - QStringList cells; + QList<QList<T>> rows; + QList<T> cells; int pos = 0; int lgt = data.length(); bool quotes = false; bool sepAsLast = false; - QString field = ""; + T field = ""; QChar c; while (pos < lgt) @@ -95,3 +96,81 @@ QList<QStringList> CsvSerializer::deserialize(const QString& data, const CsvForm return rows; } + +QList<QList<QByteArray> > CsvSerializer::deserialize(const QByteArray& data, const CsvFormat& format) +{ + return typedDeserialize<QByteArray>(data, format); +} + +QList<QStringList> CsvSerializer::deserialize(const QString& data, const CsvFormat& format) +{ + QList<QList<QString>> deserialized = typedDeserialize<QString>(data, format); + + QList<QStringList> finalList; + for (const QList<QString>& resPart : deserialized) + finalList << QStringList(resPart); + + return finalList; +} + + +//QList<QStringList> CsvSerializer::deserialize(const QByteArray& data, const CsvFormat& format) +//{ +// QList<QStringList> rows; +// QStringList cells; + +// int pos = 0; +// int lgt = data.length(); +// bool quotes = false; +// bool sepAsLast = false; +// QString field = ""; +// QChar c; + +// while (pos < lgt) +// { +// c = data[pos]; +// sepAsLast = false; +// if (!quotes && c == '"' ) +// { +// quotes = true; +// } +// else if (quotes && c == '"' ) +// { +// if (pos + 1 < data.length() && data[pos+1] == '"' ) +// { +// field += c; +// pos++; +// } +// else +// { +// quotes = false; +// } +// } +// else if (!quotes && format.columnSeparator.contains(c)) +// { +// cells << field; +// field.clear(); +// sepAsLast = true; +// } +// else if (!quotes && format.rowSeparator.contains(c)) +// { +// cells << field; +// rows << cells; +// cells.clear(); +// field.clear(); +// } +// else +// { +// field += c; +// } +// pos++; +// } + +// if (field.size() > 0 || sepAsLast) +// cells << field; + +// if (cells.size() > 0) +// rows << cells; + +// return rows; +//} |
