0

How to handle file data as shown below, which is delimited by uneven whitespaces, where if tokenizer is used based on space, it'll give tokens which cannot be assigned to java bean fields directly.

Below is the content Data of cheapdata4.data:

(TX   260816.<                                                                  
0954F2003EGGPLEIBLNX37PU  ZC550   Z  <CA      C A    L   L8 STAF P18 UL15 KIDL 
0001F0148BIKFEDDSGWI2797  ZA319   Z  <CATGWI2 C      M   V104 GMH4 GMH UL60 EDDS
4893F1416EGPGEGHFGJOID    ZSR20   Z  <AAEGPGD C A    LT  TLA DCS L612 N859 Q41  
7945F1400EGSHEGCCLOG63JF  ZD328   Z  <(A      C A R  L   OTBE Y70 EGCC          
7946F1647EGSHEGGWAZE01F   ZE50P   Z  <(A      C A R  LT  MAM1 LAPR ABBO BKY2    
7947F1701EGSHEGCCLOG63JF  ZD328   Z  <(A      C A R  L   / MAM0 OTBE POL ROSU  
4368F1657ESSBEGGWBLJ59BF  ZC56X   Z  <RAUBLJ5   A    LT  UN86 UP7 UP25 EGGW     
4369F1728ESSBEGCCETI226L  MLJ45   012<RAUETI2   A    L   UL97 Y70 EGCC          
4370F0551LHBPEGGWWZZ196   ZA321   Z  <RAUWZZ1   A    MT  UL60 UY6 UM20 EGGW     
7950END   260816.<

package com.msa.parser;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.msa.bean.CheapData;

public class FinalParser {
    public static void main(String[] args) {

        BufferedReader reader;
        try {
            StringBuilder sb = new StringBuilder();
            reader = new BufferedReader(
                    new FileReader(
                            "C:\\Users\\Desktop\\assignment\\cheapdata4.data"));

            System.out.println("Reading file...");
            String line = reader.readLine();
            line = line.replaceAll("\\s{2,}", " ");
            String[] toks = line.replace(" ", ",").trim().split(",");
            line = line.replaceAll("\\s{2,}", " ");
            String[] headerTokens = line.split(" +");
            String fileStartDate = headerTokens[1].substring(0, 6);
            List<String> cheapDataContent = new ArrayList<>();
            String[] lineTokens = { "" };
            CheapData cheapFileDets = null;
            List<CheapData> cheapDataList = new ArrayList<>();

            while (line != null) {

                line = reader.readLine();
                line = line.replaceAll("\\s{2,4}", " ");
                // line = line.replaceAll("\\s{2}", " NA ");
                // line = line.replaceAll(" ",", ");
                // line = line.replaceAll("\\,{2}", "");
                lineTokens = line.split(" +");
                int len = lineTokens.length;
                // String fileEndDate ="";
                if (len == 2) {
                    String fileEndDate = lineTokens[1].substring(0, 6);
                    if (fileStartDate.equals(fileEndDate)) {
                        break;
                    } else {
                        System.out.println("Date mismatch...");
                    }
                }
                if (len >= 6) {
                    cheapFileDets = new CheapData();
                    String lineNum = lineTokens[0].substring(0, 4);
                    cheapFileDets.setLineNum(lineNum);
                    String cheapReference = lineTokens[0].substring(4);
                    cheapFileDets.setCheapReference(cheapReference);
                    cheapFileDets.setDate(fileStartDate);
                    cheapFileDets.setAircraftCode(lineTokens[1]);
                    cheapFileDets.setIdentifierCode(lineTokens[2]);
                    cheapFileDets.setLicenseCode(lineTokens[3]);
                    if (lineTokens[4].equals("C"))
                        cheapFileDets.setCodeOne(lineTokens[4]);
                    else
                        cheapFileDets.setCodeOne(null);

                    if (lineTokens[5].equals("A"))
                        cheapFileDets.setCodeTwo(lineTokens[5]);
                    else
                        cheapFileDets.setCodeTwo(null);

                    if (lineTokens[6].equals("R"))
                        cheapFileDets.setCodeThree(lineTokens[6]);
                    else
                        cheapFileDets.setCodeThree(null);
                } else {
                    if (len == 7)
                        cheapFileDets.setIdCode(lineTokens[7]);
                    else
                        cheapFileDets.setIdCode(null);
                }
                List<String> miscList = new ArrayList<>();
                for (int i = 7; i < len - 1; i++) {
                    miscList.add(lineTokens[i]);
                }

                StringBuilder miscAll = new StringBuilder("");

                for (String miscs : miscList) {
                    miscAll.append(miscs + " ");
                }
                cheapFileDets.setMiscAll(miscAll.toString());

                cheapDataList.add(cheapFileDets);

            }

            System.out.println("File content" + sb.toString());
            System.out.println("file date is: " + fileStartDate);

            System.out.println("*************");

            /*
             * for (String strToks : lineTokens) { System.out.println(strToks);
             * }
             */

            // System.out.println(cheapDataList);

            Iterator<CheapData> itrCheapData = cheapDataList.listIterator();

            while (itrCheapData.hasNext()) {
                System.out.println(itrCheapData.next());
            }

        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

package com.msa.bean;

public class CheapData {
    private String lineNum;
    private String date;
    private String cheapReference;
    private String aircraftCode;
    private String identifierCode;
    private String licenseCode;
    private String codeOne;
    private String codeTwo;
    private String codeThree;
    private String idCode;
    private String miscAll;

    public String getLineNum() {
        return lineNum;
    }

    public void setLineNum(String lineNum) {
        this.lineNum = lineNum;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getCheapReference() {
        return cheapReference;
    }

    public void setCheapReference(String cheapReference) {
        this.cheapReference = cheapReference;
    }

    public String getAircraftCode() {
        return aircraftCode;
    }

    public void setAircraftCode(String aircraftCode) {
        this.aircraftCode = aircraftCode;
    }

    public String getIdentifierCode() {
        return identifierCode;
    }

    public void setIdentifierCode(String identifierCode) {
        this.identifierCode = identifierCode;
    }

    public String getLicenseCode() {
        return licenseCode;
    }

    public void setLicenseCode(String licenseCode) {
        this.licenseCode = licenseCode;
    }

    public String getCodeOne() {
        return codeOne;
    }

    public void setCodeOne(String lineTokens) {
        this.codeOne = lineTokens;
    }

    public String getCodeTwo() {
        return codeTwo;
    }

    public void setCodeTwo(String lineTokens) {
        this.codeTwo = lineTokens;
    }

    public String getCodeThree() {
        return codeThree;
    }

    public void setCodeThree(String codeThree) {
        this.codeThree = codeThree;
    }

    public String getIdCode() {
        return idCode;
    }

    public void setIdCode(String idCode) {
        this.idCode = idCode;
    }

    public String getMiscAll() {
        return miscAll;
    }

    public void setMiscAll(String miscAll) {
        this.miscAll = miscAll;
    }

    public CheapData(String lineNum, String date, String cheapReference,
            String aircraftCode, String identifierCode, String licenseCode,
            String codeOne, String codeTwo, String codeThree, String idCode,
            String miscAll) {
        super();
        this.lineNum = lineNum;
        this.date = date;
        this.cheapReference = cheapReference;
        this.aircraftCode = aircraftCode;
        this.identifierCode = identifierCode;
        this.licenseCode = licenseCode;
        this.codeOne = codeOne;
        this.codeTwo = codeTwo;
        this.codeThree = codeThree;
        this.idCode = idCode;
        this.miscAll = miscAll;
    }

    @Override
    public String toString() {
        return "CheapData [lineNum=" + lineNum + ", date=" + date
                + ", cheapReference=" + cheapReference + ", aircraftCode="
                + aircraftCode + ", identifierCode=" + identifierCode
                + ", licenseCode=" + licenseCode + ", codeOne=" + codeOne
                + ", codeTwo=" + codeTwo + ", codeThree=" + codeThree
                + ", idCode=" + idCode + ", miscAll=" + miscAll + "]";
    }

    public CheapData() {
        super();
    }

}

Please can anyone help me out in this regard. I want to parse above file and populate each columns from that to an object using setters in java.

Please do suggest me how to achieve this and kindly let me know if my query not clear.

Arafath
  • 100
  • 3
  • 9

0 Answers0