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

Reply via email to