Skip to content

Commit 7d13075

Browse files
author
homann
committedFeb 3, 2007
Ported r6511 to trunk
git-svn-id: http://svn.osgeo.org/qgis/trunk@6512 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent fb8e17a commit 7d13075

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed
 

‎src/providers/delimitedtext/qgsdelimitedtextprovider.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#include "qgsrect.h"
4242
#include "qgsspatialrefsys.h"
4343
#include "qgis.h"
44+
#include "qgslogger.h"
4445

4546
#ifdef WIN32
4647
#define QGISEXTERN extern "C" __declspec( dllexport )
@@ -180,6 +181,12 @@ QgsDelimitedTextProvider::QgsDelimitedTextProvider(QString uri)
180181
// split the line on the delimiter
181182
QStringList parts =
182183
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+
}
183190
//if(parts.size() == attributeFields.size())
184191
//{
185192
// // we can populate attributes if required
@@ -338,24 +345,32 @@ QgsDelimitedTextProvider::getNextFeature_( QgsFeature & feature,
338345
feature.setValid( false );
339346
while ( ! mStream->atEnd() )
340347
{
348+
double x = 0.0;
349+
double y = 0.0;
341350
QString line = mStream->readLine(); // Default local 8 bit encoding
342351
// lex the tokens from the current data line
343352
QStringList tokens = QStringList::split(mDelimiter, line, true);
344353

345354
bool xOk = false;
346355
bool yOk = false;
347356

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];
350363

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 );
353366

367+
}
354368
if (! (xOk && yOk))
355369
{
356370
// Accumulate any lines that weren't ok, to report on them
357371
// later, and look at the next line in the file, but only if
358372
// we need to.
373+
QgsDebugMsg("Malformed line : " + line);
359374
if (mShowInvalidLines)
360375
mInvalidLines << line;
361376

0 commit comments

Comments
 (0)
Please sign in to comment.