[
https://issues.apache.org/jira/browse/CSV-310?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Buddhi De Silva updated CSV-310:
--------------------------------
Description:
When we try to print CSV content using the _CSVFormat_ and {_}CSVPrinter{_}, we
can ger it done with following sample code.
{code:java}
public void testHappyPath() throws IOException {
CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
.setHeader("Col1", "Col2", "Col3", "Col4")
.setQuoteMode(QuoteMode.NONE)
.setEscape('#')
.build(); CSVPrinter printer = new CSVPrinter(System.out,
csvFormat); List<String[]> temp = new ArrayList<>(); temp.add(new
String[] { "rec1", "rec2\"", "", "rec4" });
temp.add(new String[] { "", "rec6", "rec7", "rec8" }); for (String[]
temp1 : temp) {
printer.printRecord(temp1);
}
printer.close();
} {code}
In above sample I have used 'setQuoteMode(QuoteMode.NONE)'. However, if we do
not set the escape character using 'setEscape('#')' then it would result in
following exception.
{code:java}
java.lang.IllegalArgumentException: No quotes mode set but no escape character
is set. {code}
At first, I was wondering why I was getting this error. Then I looked into the
source and figured out that _CSVFormat.printWithEscapes()_ method internaly
using _getEscapeCharacter().charValue()_ method to print records.
However, the error message which we are getting is sort of misleading. It
implies that the code has not set any quote mode even though we set it.
Simple and more meaningful exception message could be: "Quote mode set to NONE
but no escape character is set".
was:
When we try to print CSV content using the _CSVFormat_ and {_}CSVPrinter{_}, we
can ger it done with following sample code.
{code:java}
public void testHappyPath() throws IOException { CSVFormat csvFormat =
CSVFormat.DEFAULT.builder() .setHeader("Col1", "Col2", "Col3",
"Col4") .setQuoteMode(QuoteMode.NONE) .setEscape('#')
.build(); CSVPrinter printer = new CSVPrinter(System.out,
csvFormat); List<String[]> temp = new ArrayList<>(); temp.add(new
String[] { "rec1", "rec2\"", "", "rec4" }); temp.add(new String[] { "",
"rec6", "rec7", "rec8" }); for (String[] temp1 : temp) {
printer.printRecord(temp1); } printer.close(); }
{code}
In above sample I have used 'setQuoteMode(QuoteMode.NONE)'. However, if we do
not set the escape character using 'setEscape('#')' then it would result in
following exception.
{code:java}
java.lang.IllegalArgumentException: No quotes mode set but no escape character
is set. {code}
At first, I was wondering why I was getting this error. Then I looked into the
source and figured out that _CSVFormat.printWithEscapes()_ method internaly
using _getEscapeCharacter().charValue()_ method to print records.
However, the error message which we are getting is sort of misleading. It
implies that the code has not set any quote mode even though we set it.
Simple and more meaningful exception message could be: "Quote mode set to NONE
but no escape character is set".
> Misleading error message when QuoteMode set to None
> ---------------------------------------------------
>
> Key: CSV-310
> URL: https://issues.apache.org/jira/browse/CSV-310
> Project: Commons CSV
> Issue Type: Improvement
> Components: Parser
> Affects Versions: 1.10.0
> Reporter: Buddhi De Silva
> Priority: Minor
> Labels: easy-fix, formatter,
>
> When we try to print CSV content using the _CSVFormat_ and {_}CSVPrinter{_},
> we can ger it done with following sample code.
> {code:java}
> public void testHappyPath() throws IOException {
> CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
> .setHeader("Col1", "Col2", "Col3", "Col4")
> .setQuoteMode(QuoteMode.NONE)
> .setEscape('#')
> .build(); CSVPrinter printer = new CSVPrinter(System.out,
> csvFormat); List<String[]> temp = new ArrayList<>(); temp.add(new
> String[] { "rec1", "rec2\"", "", "rec4" });
> temp.add(new String[] { "", "rec6", "rec7", "rec8" }); for (String[]
> temp1 : temp) {
> printer.printRecord(temp1);
> }
> printer.close();
> } {code}
> In above sample I have used 'setQuoteMode(QuoteMode.NONE)'. However, if we do
> not set the escape character using 'setEscape('#')' then it would result in
> following exception.
> {code:java}
> java.lang.IllegalArgumentException: No quotes mode set but no escape
> character is set. {code}
> At first, I was wondering why I was getting this error. Then I looked into
> the source and figured out that _CSVFormat.printWithEscapes()_ method
> internaly using _getEscapeCharacter().charValue()_ method to print records.
>
> However, the error message which we are getting is sort of misleading. It
> implies that the code has not set any quote mode even though we set it.
> Simple and more meaningful exception message could be: "Quote mode set to
> NONE but no escape character is set".
--
This message was sent by Atlassian Jira
(v8.20.10#820010)