Changeset: 04c535b05c52 for monetdb-java URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=04c535b05c52 Modified Files: src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java Branch: default Log Message:
Fixed negative number parsing on the StartOfHeaderParser diffs (54 lines): diff --git a/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java b/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java --- a/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java +++ b/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java @@ -157,6 +157,10 @@ public class HeaderLineParser extends MC * Returns an array of ints containing the values between * ',\t' separators. * + * Feb2017 note - This integer parser doesn't have to parse negative + * numbers, because it is only used to parse column lengths + * which is always greater than 0. + * * @param chrLine a character array holding the input data * @param start where the relevant data starts * @param stop where the relevant data stops @@ -171,7 +175,6 @@ public class HeaderLineParser extends MC if (chrLine[i] == ',' && chrLine[i + 1] == '\t') { intValues[elem++] = tmp; tmp = 0; - start = i++; } else { tmp *= 10; // note: don't use Character.isDigit() here, because diff --git a/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java b/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java --- a/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java +++ b/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java @@ -96,15 +96,18 @@ public class StartOfHeaderParser { * @throws MCLParseException if no numeric value could be read */ public final int getNextAsInt() throws MCLParseException { + boolean positive = true; pos++; if (!soh.hasRemaining()) throw new MCLParseException("unexpected end of string", soh.position() - 1); - int tmp; + int tmp = 0; char chr = soh.get(); // note: don't use Character.isDigit() here, because // we only want ISO-LATIN-1 digits if (chr >= '0' && chr <= '9') { tmp = (int)chr - (int)'0'; + } else if(chr == '-') { + positive = false; } else { throw new MCLParseException("expected a digit", soh.position() - 1); } @@ -118,7 +121,7 @@ public class StartOfHeaderParser { } } - return tmp; + return positive ? tmp : -tmp; } public final String getNextAsString() throws MCLParseException { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list