|
41 | 41 | #include "qgsrect.h"
|
42 | 42 | #include "qgsspatialrefsys.h"
|
43 | 43 | #include "qgis.h"
|
| 44 | +#include "qgslogger.h" |
44 | 45 |
|
45 | 46 | #ifdef WIN32
|
46 | 47 | #define QGISEXTERN extern "C" __declspec( dllexport )
|
@@ -180,6 +181,12 @@ QgsDelimitedTextProvider::QgsDelimitedTextProvider(QString uri)
|
180 | 181 | // split the line on the delimiter
|
181 | 182 | QStringList parts =
|
182 | 183 | QStringList::split(mDelimiter, line, true);
|
| 184 | + |
| 185 | + // Skip malformed lines silently. Report line number with getNextFeature() |
| 186 | + if ( (parts.size() <= fieldPositions[mXField]) || (parts.size() <= fieldPositions[mYField]) ) |
| 187 | + { |
| 188 | + continue; |
| 189 | + } |
183 | 190 | //if(parts.size() == attributeFields.size())
|
184 | 191 | //{
|
185 | 192 | // // we can populate attributes if required
|
@@ -338,24 +345,32 @@ QgsDelimitedTextProvider::getNextFeature_( QgsFeature & feature,
|
338 | 345 | feature.setValid( false );
|
339 | 346 | while ( ! mStream->atEnd() )
|
340 | 347 | {
|
| 348 | + double x = 0.0; |
| 349 | + double y = 0.0; |
341 | 350 | QString line = mStream->readLine(); // Default local 8 bit encoding
|
342 | 351 | // lex the tokens from the current data line
|
343 | 352 | QStringList tokens = QStringList::split(mDelimiter, line, true);
|
344 | 353 |
|
345 | 354 | bool xOk = false;
|
346 | 355 | bool yOk = false;
|
347 | 356 |
|
348 |
| - int xFieldPos = fieldPositions[mXField]; |
349 |
| - int yFieldPos = fieldPositions[mYField]; |
| 357 | + // Skip indexing malformed lines. |
| 358 | + if ( ! ((tokens.size() <= fieldPositions[mXField]) || (tokens.size() <= fieldPositions[mXField])) ) |
| 359 | + { |
| 360 | + |
| 361 | + int xFieldPos = fieldPositions[mXField]; |
| 362 | + int yFieldPos = fieldPositions[mYField]; |
350 | 363 |
|
351 |
| - double x = tokens[xFieldPos].toDouble( &xOk ); |
352 |
| - double y = tokens[yFieldPos].toDouble( &yOk ); |
| 364 | + x = tokens[xFieldPos].toDouble( &xOk ); |
| 365 | + y = tokens[yFieldPos].toDouble( &yOk ); |
353 | 366 |
|
| 367 | + } |
354 | 368 | if (! (xOk && yOk))
|
355 | 369 | {
|
356 | 370 | // Accumulate any lines that weren't ok, to report on them
|
357 | 371 | // later, and look at the next line in the file, but only if
|
358 | 372 | // we need to.
|
| 373 | + QgsDebugMsg("Malformed line : " + line); |
359 | 374 | if (mShowInvalidLines)
|
360 | 375 | mInvalidLines << line;
|
361 | 376 |
|
|
0 commit comments