csvparser: Add support for old Mac OS line endings

In order to detect the CR characters, the file
must be opened in binary mode, otherwise QFile just
removes them all.

See issue #212.
This commit is contained in:
Samir Aguiar
2015-03-04 20:45:28 +01:00
parent 808c771d4e
commit ca38995013
2 changed files with 23 additions and 4 deletions

View File

@@ -125,7 +125,7 @@ void ImportCsvDialog::accept()
// Parse all csv data
QFile file(csvFilename);
file.open(QIODevice::ReadOnly | QIODevice::Text);
file.open(QIODevice::ReadOnly);
CSVParser csv(ui->checkBoxTrimFields->isChecked(), currentSeparatorChar(), currentQuoteChar());
csv.setCSVProgress(new CSVImportProgress(file.size()));
@@ -261,7 +261,7 @@ void ImportCsvDialog::updatePreview()
// Get preview data
QFile file(csvFilename);
file.open(QIODevice::ReadOnly | QIODevice::Text);
file.open(QIODevice::ReadOnly);
CSVParser csv(ui->checkBoxTrimFields->isChecked(), currentSeparatorChar(), currentQuoteChar());

View File

@@ -60,10 +60,16 @@ bool CSVParser::parse(QTextStream& stream, int64_t nMaxRecords)
}
else if(c == '\r')
{
// look ahead to check for newline
// look ahead to check for linefeed
QString::iterator nit = it + 1;
// no linefeed, so assume that CR represents a newline
if(nit != sBuffer.end() && *nit != '\n')
fieldbuf.append(c);
{
addColumn(record, fieldbuf, m_bTrimFields);
addRow(record);
}
}
else if(c == '\n')
{
@@ -108,6 +114,19 @@ bool CSVParser::parse(QTextStream& stream, int64_t nMaxRecords)
addRow(record);
}
else if(c == '\r')
{
// look ahead to check for linefeed
QString::iterator nit = it + 1;
// no linefeed, so assume that CR represents a newline
if(nit != sBuffer.end() && *nit != '\n')
{
addColumn(record, fieldbuf, m_bTrimFields);
addRow(record);
}
}
else
{
state = StateNormal;