|
39 | 39 | #include "qgsrect.h"
|
40 | 40 | #include "qgis.h"
|
41 | 41 | #include "qgsmessageviewer.h"
|
| 42 | +#include "qgslogger.h" |
42 | 43 |
|
43 | 44 | #ifdef WIN32
|
44 | 45 | #define QGISEXTERN extern "C" __declspec( dllexport )
|
@@ -178,6 +179,12 @@ QgsDelimitedTextProvider::QgsDelimitedTextProvider(QString const &uri)
|
178 | 179 | // split the line on the delimiter
|
179 | 180 | QStringList parts =
|
180 | 181 | QStringList::split(mDelimiter, line, true);
|
| 182 | + |
| 183 | + // Skip malformed lines silently. Report line number with getNextFeature() |
| 184 | + if ( (parts.size() <= fieldPositions[mXField]) || (parts.size() <= fieldPositions[mYField]) ) |
| 185 | + { |
| 186 | + continue; |
| 187 | + } |
181 | 188 | //if(parts.size() == attributeFields.size())
|
182 | 189 | //{
|
183 | 190 | // // we can populate attributes if required
|
@@ -356,24 +363,32 @@ QgsDelimitedTextProvider::getNextFeature_( QgsFeature & feature,
|
356 | 363 | feature.setValid( false );
|
357 | 364 | while ( ! mStream->atEnd() )
|
358 | 365 | {
|
| 366 | + double x = 0.0; |
| 367 | + double y = 0.0; |
359 | 368 | QString line = mStream->readLine(); // Default local 8 bit encoding
|
360 | 369 | // lex the tokens from the current data line
|
361 | 370 | QStringList tokens = QStringList::split(mDelimiter, line, true);
|
362 | 371 |
|
363 | 372 | bool xOk = false;
|
364 | 373 | bool yOk = false;
|
365 | 374 |
|
366 |
| - int xFieldPos = fieldPositions[mXField]; |
367 |
| - int yFieldPos = fieldPositions[mYField]; |
| 375 | + // Skip indexing malformed lines. |
| 376 | + if ( ! ((tokens.size() <= fieldPositions[mXField]) || (tokens.size() <= fieldPositions[mXField])) ) |
| 377 | + { |
| 378 | + |
| 379 | + int xFieldPos = fieldPositions[mXField]; |
| 380 | + int yFieldPos = fieldPositions[mYField]; |
368 | 381 |
|
369 |
| - double x = tokens[xFieldPos].toDouble( &xOk ); |
370 |
| - double y = tokens[yFieldPos].toDouble( &yOk ); |
| 382 | + x = tokens[xFieldPos].toDouble( &xOk ); |
| 383 | + y = tokens[yFieldPos].toDouble( &yOk ); |
371 | 384 |
|
| 385 | + } |
372 | 386 | if (! (xOk && yOk))
|
373 | 387 | {
|
374 | 388 | // Accumulate any lines that weren't ok, to report on them
|
375 | 389 | // later, and look at the next line in the file, but only if
|
376 | 390 | // we need to.
|
| 391 | + QgsDebugMsg("Malformed line : " + line); |
377 | 392 | if (mShowInvalidLines)
|
378 | 393 | mInvalidLines << line;
|
379 | 394 |
|
|
0 commit comments