1
1
/*
2
- * Copyright 2013, 2014 Deutsche Nationalbibliothek
2
+ * Copyright 2013-2024 Deutsche Nationalbibliothek and hbz
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 the "License";
5
5
* you may not use this file except in compliance with the License.
16
16
17
17
package org .metafacture .csv ;
18
18
19
+ import com .opencsv .CSVReader ;
20
+ import com .opencsv .CSVReaderBuilder ;
21
+ import com .opencsv .RFC4180Parser ;
22
+ import com .opencsv .RFC4180ParserBuilder ;
23
+ import com .opencsv .exceptions .CsvException ;
19
24
import org .metafacture .framework .FluxCommand ;
20
25
import org .metafacture .framework .StreamReceiver ;
21
26
import org .metafacture .framework .annotations .Description ;
22
27
import org .metafacture .framework .annotations .In ;
23
28
import org .metafacture .framework .annotations .Out ;
24
29
import org .metafacture .framework .helpers .DefaultObjectPipe ;
25
30
26
- import com .opencsv .CSVReader ;
27
-
28
31
import java .io .IOException ;
29
32
import java .io .StringReader ;
30
33
import java .util .List ;
@@ -48,6 +51,7 @@ public final class CsvDecoder extends DefaultObjectPipe<String, StreamReceiver>
48
51
private String [] header = new String [0 ];
49
52
private int count ;
50
53
private boolean hasHeader ;
54
+ private RFC4180Parser parser ;
51
55
52
56
/**
53
57
* Creates an instance of {@link CsvDecoder} with a given separator.
@@ -56,6 +60,7 @@ public final class CsvDecoder extends DefaultObjectPipe<String, StreamReceiver>
56
60
*/
57
61
public CsvDecoder (final String separator ) {
58
62
this .separator = separator .charAt (0 );
63
+ initializeCsvParser ();
59
64
}
60
65
61
66
/**
@@ -65,13 +70,21 @@ public CsvDecoder(final String separator) {
65
70
*/
66
71
public CsvDecoder (final char separator ) {
67
72
this .separator = separator ;
73
+ initializeCsvParser ();
68
74
}
69
75
70
76
/**
71
77
* Creates an instance of {@link CsvDecoder}. The default separator is
72
78
* {@value #DEFAULT_SEP}.
73
79
*/
74
80
public CsvDecoder () {
81
+ initializeCsvParser ();
82
+ }
83
+
84
+ private void initializeCsvParser () {
85
+ this .parser = new RFC4180ParserBuilder ()
86
+ .withSeparator (separator )
87
+ .build ();
75
88
}
76
89
77
90
@ Override
@@ -105,18 +118,18 @@ else if (parts.length == header.length) {
105
118
}
106
119
}
107
120
108
- private String [] parseCsv (final String string ) {
121
+ private String [] parseCsv (final String csv ) {
109
122
String [] parts = new String [0 ];
110
123
try {
111
- final CSVReader reader = new CSVReader (new StringReader (string ),
112
- separator );
124
+ final CSVReader reader = new CSVReaderBuilder (new StringReader (csv ))
125
+ .withCSVParser (parser )
126
+ .build ();
113
127
final List <String []> lines = reader .readAll ();
114
128
if (lines .size () > 0 ) {
115
129
parts = lines .get (0 );
116
130
}
117
131
reader .close ();
118
- }
119
- catch (final IOException e ) {
132
+ } catch (final IOException | CsvException e ) {
120
133
e .printStackTrace ();
121
134
}
122
135
return parts ;
@@ -139,5 +152,6 @@ public void setHasHeader(final boolean hasHeader) {
139
152
*/
140
153
public void setSeparator (final String separator ) {
141
154
this .separator = separator .charAt (0 );
155
+ initializeCsvParser ();
142
156
}
143
157
}
0 commit comments