Apologies for missing the component name on the Subject line. This is for the [CSV] component.
On Thu, 7 Sept 2023 at 09:26, Buddhi De Silva <gbids...@gmail.com> wrote: > Hello Commons-Devs, > > Related Jira issue: https://issues.apache.org/jira/browse/CSV-310 > > Scenario: > When we try to print CSV content using the CSVFormat and CSVPrinter, we > can get it done with the following sample code. > > 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(); > } > > In the above sample I have used 'setQuoteMode(QuoteMode.NONE)'. However, > if we do not set the escape character using 'setEscape('#')' then it would > result in the following exception. > *java.lang.IllegalArgumentException: No quotes mode set but no escape > character is set.* > > At first, I was wondering why I was getting this error. Then I looked into > the source and figured out that the CSVFormat.printWithEscapes() method > internally uses the '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.* > > Please see the PR created on this: > https://github.com/apache/commons-csv/pull/352 > > Thank you. > Buddhi De SIlva. >