how to read data with two headers

48 Views Asked by At

what is the best way to read csv data with two headers.

            try (CSVReader csvReader = new CSVReaderBuilder(new InputStreamReader(file.getInputStream()))
                .withCSVParser(new CSVParserBuilder().withSeparator(',').build())
                .build()) {

            HeaderColumnNameMappingStrategy<TemperatureData> strategy = new HeaderColumnNameMappingStrategy<>();
            strategy.setType(TemperatureData.class);

            CsvToBean<TemperatureData> csvToBean = new CsvToBeanBuilder<TemperatureData>(csvReader)
                    .withMappingStrategy(strategy)
                    .withSkipLines(2)
                    .build();

            List<TemperatureData> dataList = csvToBean.parse();

            Map<String, List<TemperatureData>> groupedData = new HashMap<>();
 for (TemperatureData data : dataList) {
            String key = data.getOC062(); 
            if (!groupedData.containsKey(key)) {
                groupedData.put(key, new ArrayList<>());
            }
            groupedData.get(key).add(data);
        }
        
        for (Map.Entry<String, List<TemperatureData>> entry : groupedData.entrySet()) {
            System.out.println("Key: " + entry.getKey());
            for (TemperatureData data : entry.getValue()) {
                System.out.println(data);
            }
            System.out.println("------------------------------");
        }

temdata class

  @CsvBindByName(column = "OC(062)")
private String OC78;

@CsvBindByName(column = "IC(012)")
private String IC;

@CsvBindByName(column = "Date")
private String date;

@CsvBindByName(column = "Time")
private String time;

@CsvBindByName(column = "Counter")
private String counter;

@CsvBindByName(column = "TH1")
private String _TH1;

@CsvBindByName(column = "TH2")
private String _TH2;

@CsvBindByName(column = "TH3")
private String _TH3;

@CsvBindByName(column = "IC S")
private String _ICS;

    @Override
public String toString() {
    return "CsvData{" +
            ", OC='" + OC62 + '\'' +
            ", IC='" + IC + '\'' +
            ", date='" + date + '\'' +
            ", time='" + time + '\'' +
            ", counter='" + counter + '\'' +
            ", THHS='" + _THHS + '\'' +
            ", TH1='" + _TH1 + '\'' +
            ", TH2='" + _TH2 + '\'' +
            ", TH3='" + _TH3 + '\'' +
            ", ICS='" + _ICS + '\'' +
            '}';
}

but in this way i get only second header with the value

output

CsvData{, OC='THHS5', IC='IC S', date='null', time='null', counter='null', THHS='null', TH1='null', TH2='null', TH3='null', ICS='null'} CsvData{, OC=' 18.1', IC='Stop', date='null', time='null', counter='null', THHS='null', TH1='null', TH2='null', TH3='null', ICS='null'}

csv data

, , ,OC(062),OC(062),OC(062),OC(062),OC(062),OC(062),OC(062),OC(062),OC(062),OC(062),OC(062),IC(012),IC(012),IC(012),IC(012),IC(013),IC(013),IC(013),IC(013), Date,Time,Counter,63HS1,TH11,TH5,TH6,TH7,TH8,THHS,63LS,Tc,Te,THHS5,TH1,TH2,TH3,IC S,TH1,TH2,TH3,IC S, 3/7/2024,12:11:26,1, 29.8, 99.1, 0.3, 6.6, 1.9, 4.7, 30.1, 7.1, 49.3, 0.0, 18.1, 16.0, 49.1, 49.1,Stop, 16.5, 49.1, 48.5,Stop, 3/7/2024,12:12:26,2, 29.5, 99.6, 0.0, 6.6, 1.5, 4.5, 30.4, 7.1, 49.1, 0.0, 18.1, 16.0, 48.5, 49.1,Stop, 16.5, 49.1, 48.5,Stop,

0

There are 0 best solutions below