SuperCSV가 NULL 값을 처리하는 방법을 구성하는 방법이 있습니까?SuperCSV로 NULL 값을 가진 열을 처리하십시오
,,
또는 같은 : 같은
,NULL,
또는이 때때로로 처리됩니다
,null,
을하지만 SuperCSV 처리 할 것으로 예상하는 방법을 구성 할 수있는 방법을 찾을 수 없습니다 특히 숫자 열의 경우
SuperCSV가 NULL 값을 처리하는 방법을 구성하는 방법이 있습니까?SuperCSV로 NULL 값을 가진 열을 처리하십시오
,,
또는 같은 : 같은
,NULL,
또는이 때때로로 처리됩니다
,null,
을하지만 SuperCSV 처리 할 것으로 예상하는 방법을 구성 할 수있는 방법을 찾을 수 없습니다 특히 숫자 열의 경우
,,
은 Super CSV에서 자동으로 처리합니다. 예를 들어 다음
@Test
public void testNullsWithDefaultBehaviour() throws IOException{
String csv = ",null,NULL\n";
try (ICsvListReader reader = new CsvListReader(new StringReader(csv),
CsvPreference.STANDARD_PREFERENCE)){
List<String> values = reader.read();
for (String v : values){
System.out.println(v == null);
}
}
}
이
true
false
false
당신이 셀 프로세서 (Optional
및 Token
의 조합)를 사용하여뿐만 아니라 "NULL"
및 "null"
을 처리 할 수 인쇄됩니다. 더 재사용 할 수 있도록하기 위해, 단순히 이것을 설정하는 자신 만의 프로세서를 정의 할 수 있습니다. 이 프로세서는 null
을 확인한 다음 "null"
을 찾은 다음 "NULL"
을 반환하고 일치하는 것이 발견되면 null
을 반환합니다. 그렇지 않으면 값이 변경되지 않고 반환됩니다.
public class CustomOptional extends Optional {
public CustomOptional(){
super(new Token("null", null, new Token("NULL", null)));
}
public CustomOptional(final CellProcessor next) {
super(new Token("null", null, new Token("NULL", null, next)));
}
}
Optional
와 당신처럼 그런 다음
true
true
true
숫자 열을 처리하기 위해 인쇄합니다이 프로세서
@Test
public void testNullsUsingProcessors() throws IOException{
String csv = ",null,NULL\n";
CellProcessor[] processors = {new CustomOptional(),
new CustomOptional(),
new CustomOptional()};
try (ICsvListReader reader = new CsvListReader(new StringReader(csv),
CsvPreference.STANDARD_PREFERENCE)){
List<Object> values = reader.read(processors);
for (Object v : values){
System.out.println(v == null);
}
}
}
을 사용할 수 있습니다
, 당신은 단순히 그것을 함께 체인 수 있습니다
new CustomOptional(new ParseInt())
이 답변을 주셔서 감사합니다.하지만이 버그는 세미 버그로 간주됩니다. NULL을 나타내는 유일한 수단으로 ,,를 사용하면 빈 문자열과 NULL 문자열의 차이로 인해 문제가 발생합니다. 많은 데이터베이스 내보내기 시스템은 특히 SuperCSV가 기본적으로 기대하는 유일한 방법으로 NULL을 나타내지 않습니다. 그들은 \ n 또는 NULL을 사용하여 NULL을 사용하므로 따옴표가 선택적 인 상황에서 널 문자열과 빈 문자열을 구분할 수 있습니다. – robross0606
예, CSV 형식의 제한 사항입니다. 다른 형식 (예 : JSON, YAML, XML)은 해킹 가능 (이동 불가능) 해결 방법없이 null 문자열과 빈 문자열을 구별 할 수 있습니다. –
이 솔루션은 또한 Bean 목록을 읽는 중 잘 작동하지 않는 것 같습니다. NULL이 아닌 여러 열이 있지만 String (Double, Integer 등) 이외의 다른 데이터 유형 인 경우 어떻게합니까? – robross0606
루 ks는 빈칸과 같이 null 케이스가 다음 릴리즈에서 작동해야합니다. https://github.com/super-csv/super-csv/pull/84 –