0

I have a CSV log file and it contains many rows like this:

2016-06-21 12:00:00,000 : helloworld: header1=2;header2=6;header=0

I want to write them to a new CSV file.

public void readLogFile() throws Exception
{
    String currentLine = "";
    String nextLine = "";

    BufferedReader reader = new BufferedReader(new FileReader(file(false)));
    while ((currentLine = reader.readLine()) != null)
    {
        if (currentLine.contains("2016") == true)
        {
            nextLine = reader.readLine();
            if (nextLine.contains("helloworld") == true)
            {                   
                currentLine = currentLine.substring(0, 23);
                nextLine = nextLine.substring(22, nextLine.length());

                String nextBlock = replaceAll(nextLine);
                System.out.println(currentLine + " : helloworld: " + nextBlock);

                String[] data = nextBlock.split(";");
                for (int i = 0, max = data.length; i < max; i++)
                {
                    String[] d = data[i].split("=");
                    map.put(d[0], d[1]);
                }
            }
        }
    }
    reader.close();
}

This is my method to write the content:

public void writeContentToCsv() throws Exception
{
    FileWriter writer = new FileWriter(".../file_new.csv");
    for (Map.Entry<String, String> entry : map.entrySet())
    {
        writer.append(entry.getKey()).append(";").append(entry.getValue()).append(System.getProperty("line.separator"));
    }
    writer.close();
}

This is the output I want to have:

header1; header2; header3
2;6;0
1;5;1
5;8;8
...

Currently, the CSV file looks like this (only showing one dataset):

header1;4
header2;0
header3;0

Can anyone help me fix the code?

1
  • 1
    Please use a debugger and see where it is going wrong Commented Jun 21, 2016 at 10:34

3 Answers 3

2

Create a class to store the header values, and store it in the list. Iterate over the list to save the results.

The currently used map can only store 2 values (which it is storing the header value (name its corresponding value)

map.put(d[0], d[1]); here d[0] will be header1 and d[1] will be 4 (but we want only 4 from here)

    class Headervalues {
    String[] header = new String[3];
}

public void readLogFile() throws Exception
{
    List<HeaderValues> list = new ArrayList<>();
    String currentLine = "";
    BufferedReader reader = new BufferedReader(new FileReader(file(false)));
    while ((currentLine = reader.readLine()) != null)
    {
        if (currentLine.contains("2016") && currentLine.contains("helloworld"))
        {

                String nextBlock = replaceAll(currentLine.substring(22, currentLine.length());

                String[] data = nextBlock.split(";");
                HeaderValues headerValues = new HeaderValues();
                //Assuming data.length will always be 3.
                for (int i = 0, max = data.length; i < max; i++)
                {
                    String[] d = data[i].split("=");
                    //Assuming split will always have size 2
                   headerValues.header[i] = d[1];
                }
                list.add(headerValues)
            }
        }
    }
    reader.close();
}
public void writeContentToCsv() throws Exception
{
    FileWriter writer = new FileWriter(".../file_new.csv");
    for (HeaderValues value : headerValues)
    {
        writer.append(value.header[0]).append(";").append(value.header[1]).append(";").append(value.header[2]);
    }
    writer.close();
}
Sign up to request clarification or add additional context in comments.

2 Comments

I need to fix your suggestion, but besides that, it worked! Thanks for your help!
The solution was to provide a general direction, and was not intended to be working example, as I am not completely aware of the entire code. I tried to restrict myself to the code that was provided, making minimal changes. Thanks.
0

For writing to CSV

public void writeCSV() {

        // Delimiter used in CSV file
        private static final String NEW_LINE_SEPARATOR = "\n";

        // CSV file header
        private static final Object[] FILE_HEADER = { "Empoyee Name","Empoyee Code", "In Time", "Out Time", "Duration", "Is Working Day" };

        String fileName = "fileName.csv");
        List<Objects> objects = new ArrayList<Objects>();
        FileWriter fileWriter = null;
        CSVPrinter csvFilePrinter = null;

        // Create the CSVFormat object with "\n" as a record delimiter
        CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR);

        try {
            fileWriter = new FileWriter(fileName);

            csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);

            csvFilePrinter.printRecord(FILE_HEADER);

            // Write a new student object list to the CSV file
            for (Object object : objects) {
                List<String> record = new ArrayList<String>();

                record.add(object.getValue1().toString());
                record.add(object.getValue2().toString());
                record.add(object.getValue3().toString());

                csvFilePrinter.printRecord(record);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fileWriter.flush();
                fileWriter.close();
                csvFilePrinter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

1 Comment

Where does CSVFormat and CSVPrinter come from?
0

Read and write/append CSV file using org.apache.commons.csv.CSVParser.

public void appendCSV(){
        String [] records = {};
        String csvWrite= "";
        Boolean status = false;

        try(BufferedReader csvReaders = new BufferedReader(new FileReader("csvfile.csv"));
                CSVParser parser = CSVFormat.DEFAULT.withDelimiter(',').withHeader().parse(csvReaders);
                ) {

            for(CSVRecord record : parser) {
                status= record.get("Microservice").equalsIgnoreCase(apipath);
                int status_code=0;
                String httpMethod = record.get("Method");

                if(status==true) {
                csvWrite = record.get("apiName")+"-"+record.get("Microservice")+"-"+record.get("R_Data")+"-"+record.get("Method")+"-"+record.get("A_Status")+"-"+400+"-"+record.get("A_Response")+"-"+"{}";
                    records = csvWrite.split("-");
                    CSVWriter writer = new CSVWriter(new FileWriter(pathTowritecsv,true));
                    writer.writeNext(records);
                    writer.close();

                }else {

                }
            }
        } 

        catch (Exception e) {
            System.out.println(e);
        }

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.