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. |