aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2015-04-19 22:30:43 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2015-04-19 22:30:43 -0400
commit094918f048c81474b22f9ba2940c96dc4033d753 (patch)
tree2b89c77ad7dc9c55e9ba383f23f9f25b82df358e /SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
parent640fff60ceecde402131937dddb3458f7a003e9c (diff)
parenta308f430f694423064ebc86fd0506c8c6fdb3d93 (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.cpp87
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;
+//}