Uploaded image for project: 'Commons CSV'
  1. Commons CSV
  2. CSV-198

Cannot parse file by header with custom delimiter on Java 1.6

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Information Provided
    • 1.4
    • None
    • Parser
    • None
    • Java 1.6, Windows

    Description

      Reading a CSV file from the parser using the header line results in "IllegalArgumentException: Mappng for <column> not found" - even when the column exists in the file. In this case, we are using Java 1.6 and the file uses the ^ symbol to delimit columns. This works correctly in Java 7 & Java 8.

      The code required to reproduce the issue is below. You can find the optd_por_public.csv file referenced at https://raw.githubusercontent.com/opentraveldata/opentraveldata/master/opentraveldata/optd_por_public.csv

      It will need to be on the classpath to run the unit test. Hope that helps, Tadhg

      You should get the following output

      --------------------------------------

      java.lang.IllegalArgumentException: Mapping for location_type not found, expected one of [iata_code,icao_code,faa_code,is_geonames,geoname_id,envelope_id,name,asciiname,latitude,longitude,fclass,fcode,page_rank,date_from,date_until,comment,country_code,cc2,country_name,continent_name,adm1_code,adm1_name_utf,adm1_name_ascii,adm2_code,adm2_name_utf,adm2_name_ascii,adm3_code,adm4_code,population,elevation,gtopo30,timezone,gmt_offset,dst_offset,raw_offset,moddate,city_code_list,city_name_list,city_detail_list,tvl_por_list,state_code,location_type,wiki_link,alt_name_section,wac,wac_name]
      	at org.apache.commons.csv.CSVRecord.get(CSVRecord.java:104)
      	at com.amadeus.ui.CSVRecordTest.test(CSVRecordTest.java:31)
      

      ------------

      import static org.junit.Assert.assertNotNull;
      
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.io.UnsupportedEncodingException;
      
      import org.apache.commons.csv.CSVFormat;
      import org.apache.commons.csv.CSVParser;
      import org.apache.commons.csv.CSVRecord;
      import org.junit.Test;
      
      public class CSVRecordTest {
      
      	private static final CSVFormat CSV_FORMAT = CSVFormat.EXCEL.withDelimiter('^').withFirstRecordAsHeader();
      	
      	@Test
      	public void test() throws UnsupportedEncodingException, IOException {
      		InputStream pointsOfReference = getClass().getResourceAsStream("/optd_por_public.csv");
      		CSVParser parser = CSV_FORMAT.parse(new InputStreamReader(pointsOfReference, "UTF-8"));
      		for (CSVRecord record : parser) {
      			String locationType = record.get("location_type");
      			assertNotNull(locationType);
      		}
      	}
      
      }
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            tadhg Tadhg Pearson
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: