diff --git a/csvwriter.cpp b/csvwriter.cpp index a52babe..a2bb973 100644 --- a/csvwriter.cpp +++ b/csvwriter.cpp @@ -1,30 +1,64 @@ #include "csvwriter.h" CsvWriter::CsvWriter() -{ +{} +CsvWriter::CsvWriter(QTextStream *output) + : m_output(output) +{} + +void CsvWriter::setDestination(QTextStream *output) +{ + m_output = output; + m_column = 0; } +void CsvWriter::setSeperator(QChar ch) +{ + m_seperator = ch; +} -//int complexField = (strchr(field, csvWriter->delimiter_) || strchr(field, '\n') || strchr(field, '\"')) ? 1 : 0; +void CsvWriter::setQuote(QChar ch) +{ + m_quote = ch; +} -void CsvWriter::writeField(QString field) { - // if field contains any of seperator quote or newline then it needs to be quoted +void CsvWriter::writeField(QString field) +{ + QTextStream &out = *m_output; + if (m_column > 0) { + out << m_seperator; + } + // if field contains any of seperator, quote or newline then it needs to be quoted // when quoted quotes need to be doubled to escape them bool needs_quotes = false; - int new_len = field.length(); for (auto ch : field) { - if (ch == m_quote) { - ++new_len; - } if (ch == '\n' || ch == m_seperator || ch == m_quote) { needs_quotes = true; - + break; } } + if (needs_quotes) { - new_len += 2; - - + out << m_quote; + for (auto ch : field) { + if (ch == m_quote) + out << m_quote; + out << ch; + } + out << m_quote; } + else { + out << field; + } + ++m_column; } + + +void CsvWriter::nextRow() +{ + QTextStream &out = *m_output; + out << '\n'; + m_column = 0; +} + diff --git a/csvwriter.h b/csvwriter.h index 054284b..da48a4a 100644 --- a/csvwriter.h +++ b/csvwriter.h @@ -2,22 +2,22 @@ #define CSVWRITER_H #include -#include +#include class CsvWriter { public: CsvWriter(); - void setDestination(QFileDevice *output); - void setDestination(QString filename); - + explicit CsvWriter(QTextStream *output); + void setDestination(QTextStream *output); void setSeperator(QChar ch); + void setQuote(QChar ch); void writeField(QString field); - void nextLine(); + void nextRow(); private: QChar m_seperator = ','; - QChar m_quote = '\''; - - QFileDevice *m_output = nullptr; + QChar m_quote = '"'; + QTextStream *m_output = nullptr; + int m_column = 0; }; #endif // CSVWRITER_H