2013-06-07 5 views
0

Super-CSV-Dozer API를 사용하여 CSV 정규화를 수행하고 싶습니다. 내가 좋아하는 콩의 형식에서 데이터의 정규화 된 표현을 갖고 싶어Super-CSV : "CSV 정규화"를 수행하는 방법은 무엇입니까?

ObjectA_ID,ObjectA_Name,ObjectB_ID,ObjectB_Name 
1,A_Name1,10,B_Name1 
1,A_Name1,11,B_Name2 
1,A_Name1,12,B_Name3 
... 
2,A_Name2,20,B_Name11 
2,A_Name2,21,B_Name12 
2,A_Name2,22,B_Name13 
... 

과 (CsvDozerBeanReader를 통해 예를 들어)이 파일을 읽은 후 :

나는 형태의 CSV 파일이

Class ObjectA { 
    private long id; 
    private String name; 
    private Collection objectBs; 
    ... 
} 

Class ObjectB { 
    private long id; 
    private String name; 
    ... 
} 

Super-CSV-Dozer에는 기본 제공 기능이 있습니까?

답변

1

각 행이 다른 ObjectA으로 표시되는 경우 this answer (처음에는 질문이 this과 유사하다고 생각했습니다).

의견을 읽은 후에도 도움이되지 않습니다. ObjectA 열은 속한 ObjectB마다 반복됩니다.

슈퍼 CSV는 이것을 결합 할 수 없으므로 각 ObjectA을지도에 저장해야합니다. 아이디

  • 예라면의지도에 ObjectA이 있다면

    • 확인 (CsvDozerBeanMapper 사용)을 ObjectA 콩과 같이 각 행에 대한

      • , 다음 업데이트 현재에 ObjectB을 추가하여

      • 아니, 그럼 그냥지도

  • 돌아지도의 값 (정규화 된 ObjectA 년대)에 추가합니다.

정상화해야한다는 단점은 모든 ObjectA을 메모리에 저장해야한다는 것입니다.

+0

답장을 보내 주셔서 감사합니다. 나는 당신의 [answer] (http://stackoverflow.com/a/12504722/1068649)를 붉히지 만 그것이 그것을 이해한다면 그것은 내 문제를 해결하지 못한다. – user2463924

+0

제 질문은 열이 아니라 CSV 행의 정규화입니다. 그래서 문제는 Super-CSV/Dozer 기능이 중복을 제거하고 "수퍼 테이블"(CVS 파일)을 여러 행으로 정규화하는 "행 기반"정규화를 수행하는 데 도움이되는지 여부입니다. 결과적인 Beans). 샘플에서는 대답하는 종속 Bean 컬렉션 (답변 모음)은 원래 csv 파일 내의 열 집합으로 모델링됩니다. 하지만 제 경우에는 csv 파일에 여러 행이 있습니다. 예를 들어 ObjectA의 데이터는 동일하게 유지되고 할당 된 ObjectB의 데이터가 변경됩니다. – user2463924

+0

업데이트 주셔서 감사합니다! 내가 알고 싶었던 것만 큼 : 내가 직접해야할지 아니면 supercsv/dozer의 도움을 받아야하는지. – user2463924