From 8db9f1fc54a514879c3b21fe3f53b181d33c107d Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 9 Sep 2017 22:59:13 +0000 Subject: [PATCH] Enhance the ADIF parser to accept newlines between fields ADIF allows any characters between fields to aid readability. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8082 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- logbook/adif.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/logbook/adif.cpp b/logbook/adif.cpp index 30f450a0b..25790d5b4 100644 --- a/logbook/adif.cpp +++ b/logbook/adif.cpp @@ -58,16 +58,27 @@ void ADIF::load() QFile inputFile(_filename); if (inputFile.open(QIODevice::ReadOnly)) { - QTextStream in(&inputFile); - while ( !in.atEnd() ) + QTextStream in(&inputFile); + QString record; + + // skip header record + while (!in.atEnd () && !record.contains ("", Qt::CaseInsensitive)) { - QString line = in.readLine(); - QSO q; - q.call = _extractField(line,"CALL:"); - q.band = _extractField(line,"BAND:"); - q.mode = _extractField(line,"MODE:"); - q.date = _extractField(line,"QSO_DATE:"); - if (q.call != "") + record += in.readLine (); + } + while ( !in.atEnd() ) + { + record.clear (); + while (!in.atEnd () && !record.contains ("", Qt::CaseInsensitive)) + { + record += in.readLine (); + } + QSO q; + q.call = _extractField(record,"CALL:"); + q.band = _extractField(record,"BAND:"); + q.mode = _extractField(record,"MODE:"); + q.date = _extractField(record,"QSO_DATE:"); + if (q.call != "") _data.insert(q.call,q); } inputFile.close();