|
From: <zep...@us...> - 2011-06-23 20:39:24
|
Revision: 428
http://flatpack.svn.sourceforge.net/flatpack/?rev=428&view=rev
Author: zepernick
Date: 2011-06-23 20:39:18 +0000 (Thu, 23 Jun 2011)
Log Message:
-----------
Fixed bug in determining when a line is part of a multiline record
Modified Paths:
--------------
trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java
trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java
Modified: trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java 2011-06-08 20:13:00 UTC (rev 427)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java 2011-06-23 20:39:18 UTC (rev 428)
@@ -145,7 +145,6 @@
ds.setMetaData(getPzMetaData());
continue;
}
-
// column values
List columns = ParserUtils.splitLine(line, getDelimiter(), getQualifier(), FPConstants.SPLITLINE_SIZE_INIT);
final String mdkey = ParserUtils.getCMDKeyForDelimitedFile(getPzMetaData(), columns);
@@ -248,7 +247,7 @@
// be checked if we have specified a delimiter
// ********************************************************
final char[] chrArry = trimmed.toCharArray();
- if (!processingMultiLine && delim > 0) {
+ if (!processingMultiLine && delim > 0 && qual != FPConstants.NO_QUALIFIER) {
processingMultiLine = ParserUtils.isMultiLine(chrArry, delim, qual);
}
Modified: trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java 2011-06-08 20:13:00 UTC (rev 427)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java 2011-06-23 20:39:18 UTC (rev 428)
@@ -506,7 +506,8 @@
// }
/**
- * Determines if the given line is the first part of a multiline record
+ * Determines if the given line is the first part of a multiline record. It does this by verifying that the
+ * qualifer on the last element is not closed
*
* @param chrArry -
* char data of the line
@@ -524,21 +525,20 @@
// could be a potential line break
boolean qualiFound = false;
for (int i = chrArry.length - 1; i >= 0; i--) {
+ //System.out.println(chrArry[i]);
+ if (chrArry[i] == ' ') {
+ continue;
+ }
+
// check to see if we can find a qualifier followed by a
// delimiter
// remember we are working are way backwards on the line
if (qualiFound) {
- if (chrArry[i] == ' ') {
- continue;
- } else {
- // not a space, if this char is the delimiter, then we
- // have a line break in the record
- if (chrArry[i] == delimiter) {
- return true;
- }
- qualiFound = false;
- continue;
+ if (chrArry[i] == delimiter) {
+ return true;
}
+ //guard against multiple qualifiers in the sequence [ ,""We ]
+ qualiFound = chrArry[i] == qualifier;
} else if (chrArry[i] == delimiter) {
// if we have a delimiter followed by a qualifier, then we
// have moved on to a new element and this could not be multiline.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|