void QgsDelimitedTextFile::setTypeRegexp( QString regexp ) { resetDefinition(); mType = DelimTypeRegexp; mDelimRegexp.setPattern( regexp ); mParser = &QgsDelimitedTextFile::parseRegexp; mDefinitionValid = regexp.size() > 0 && mDelimRegexp.isValid(); if ( ! mDefinitionValid ) { QgsDebugMsg( "Invalid regular expression in delimited text file delimiter: " + regexp ); } }
void QgsDelimitedTextFile::setTypeCSV( QString delim, QString quote, QString escape ) { resetDefinition(); mType = DelimTypeCSV; mDelimChars = decodeChars( delim ); mQuoteChar = decodeChars( quote ); mEscapeChar = decodeChars( escape ); mParser = &QgsDelimitedTextFile::parseQuoted; mDefinitionValid = mDelimChars.size() > 0; if ( ! mDefinitionValid ) { QgsDebugMsg( "Invalid empty delimiter defined for text file delimiter" ); } }
void QgsDelimitedTextFile::setTypeCSV( const QString &delim, const QString "e, const QString &escape ) { resetDefinition(); mType = DelimTypeCSV; mDelimChars = decodeChars( delim ); mQuoteChar = decodeChars( quote ); mEscapeChar = decodeChars( escape ); mParser = &QgsDelimitedTextFile::parseQuoted; mDefinitionValid = !mDelimChars.isEmpty(); if ( ! mDefinitionValid ) { QgsDebugMsg( "Invalid empty delimiter defined for text file delimiter" ); } }
void QgsDelimitedTextFile::setTypeRegexp( QString regexp ) { resetDefinition(); mType = DelimTypeRegexp; mDelimRegexp.setPattern( regexp ); mAnchoredRegexp = regexp.startsWith( "^" ); mParser = &QgsDelimitedTextFile::parseRegexp; mDefinitionValid = regexp.size() > 0 && mDelimRegexp.isValid(); if ( ! mDefinitionValid ) { QgsDebugMsg( "Invalid regular expression in delimited text file delimiter: " + regexp ); } else if ( mAnchoredRegexp && mDelimRegexp.captureCount() == 0 ) { mDefinitionValid = false; QgsDebugMsg( "Invalid anchored regular expression - must have capture groups: " + regexp ); } }
void QgsDelimitedTextFile::setDiscardEmptyFields( bool discardEmptyFields ) { resetDefinition(); mDiscardEmptyFields = discardEmptyFields; }
void QgsDelimitedTextFile::setMaxFields( int maxFields ) { resetDefinition(); mMaxFields = maxFields; }
void QgsDelimitedTextFile::setTrimFields( bool trimFields ) { resetDefinition(); mTrimFields = trimFields; }
void QgsDelimitedTextFile::setUseHeader( bool useheader ) { resetDefinition(); mUseHeader = useheader; }
void QgsDelimitedTextFile::setSkipLines( int skiplines ) { resetDefinition(); mSkipLines = skiplines; }
void QgsDelimitedTextFile::setEncoding( QString encoding ) { resetDefinition(); mEncoding = encoding; }
void QgsDelimitedTextFile::setFileName( QString filename ) { resetDefinition(); mFileName = filename; }
// Extract the provider definition from the url bool QgsDelimitedTextFile::setFromUrl( const QUrl &url ) { // Close any existing definition resetDefinition(); // Extract the file name setFileName( url.toLocalFile() ); // Extract the encoding if ( url.hasQueryItem( "encoding" ) ) { mEncoding = url.queryItemValue( "encoding" ); } // if ( url.hasQueryItem( "useWatcher" ) ) { mUseWatcher = ! url.queryItemValue( "useWatcher" ).toUpper().startsWith( 'N' ); } // The default type is csv, to be consistent with the // previous implementation (except that quoting should be handled properly) QString type( "csv" ); QString delimiter( "," ); QString quote = "\""; QString escape = "\""; mUseHeader = true; mSkipLines = 0; // Prefer simple "type" for delimiter type, but include delimiterType // as optional name for backwards compatibility if ( url.hasQueryItem( "type" ) || url.hasQueryItem( "delimiterType" ) ) { if ( url.hasQueryItem( "type" ) ) type = url.queryItemValue( "type" ); else if ( url.hasQueryItem( "delimiterType" ) ) type = url.queryItemValue( "delimiterType" ); // Support for previous version of Qgs - plain chars had // quote characters ' or " if ( type == "plain" ) { quote = "'\""; escape = ""; } else if ( type == "regexp " ) { delimiter = ""; quote = ""; escape = ""; } } if ( url.hasQueryItem( "delimiter" ) ) { delimiter = url.queryItemValue( "delimiter" ); } if ( url.hasQueryItem( "quote" ) ) { quote = url.queryItemValue( "quote" ); } if ( url.hasQueryItem( "escape" ) ) { escape = url.queryItemValue( "escape" ); } if ( url.hasQueryItem( "skipLines" ) ) { mSkipLines = url.queryItemValue( "skipLines" ).toInt(); } if ( url.hasQueryItem( "useHeader" ) ) { mUseHeader = ! url.queryItemValue( "useHeader" ).toUpper().startsWith( 'N' ); } if ( url.hasQueryItem( "skipEmptyFields" ) ) { mDiscardEmptyFields = ! url.queryItemValue( "skipEmptyFields" ).toUpper().startsWith( 'N' ); } if ( url.hasQueryItem( "trimFields" ) ) { mTrimFields = ! url.queryItemValue( "trimFields" ).toUpper().startsWith( 'N' ); } if ( url.hasQueryItem( "maxFields" ) ) { mMaxFields = url.queryItemValue( "maxFields" ).toInt(); } QgsDebugMsg( "Delimited text file is: " + mFileName ); QgsDebugMsg( "Encoding is: " + mEncoding ); QgsDebugMsg( "Delimited file type is: " + type ); QgsDebugMsg( "Delimiter is: [" + delimiter + "]" ); QgsDebugMsg( "Quote character is: [" + quote + "]" ); QgsDebugMsg( "Escape character is: [" + escape + "]" ); QgsDebugMsg( "Skip lines: " + QString::number( mSkipLines ) ); QgsDebugMsg( "Maximum number of fields in record: " + QString::number( mMaxFields ) ); QgsDebugMsg( "Use headers: " + QString( mUseHeader ? "Yes" : "No" ) ); QgsDebugMsg( "Discard empty fields: " + QString( mDiscardEmptyFields ? "Yes" : "No" ) ); QgsDebugMsg( "Trim fields: " + QString( mTrimFields ? "Yes" : "No" ) ); // Support for previous version of plain characters if ( type == "csv" || type == "plain" ) { setTypeCSV( delimiter, quote, escape ); } else if ( type == "whitespace" ) { setTypeWhitespace(); } else if ( type == "regexp" ) { setTypeRegexp( delimiter ); } else { return false; } return mDefinitionValid; }