4

I have a CSV file which looks like this: http://gyazo.com/5dcfb8eca4e133cbeac87f514099e320.png

I need to figure out how I can read specific cells and update them in the file.

This is the code I am using:

import java.util.List;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import com.opencsv.*;

public class ReadCSV {

    private static final char SEPARATOR = ';';

    public static void updateCSV(String input, String output, String  replace, int row, int col) throws IOException {   

          CSVReader reader = new CSVReader(new FileReader(input),SEPARATOR);
            List<String[]> csvBody = reader.readAll();
            csvBody.get(row)[col]=replace;
            reader.close();

            CSVWriter writer = new CSVWriter(new FileWriter(output),SEPARATOR,' ');
            writer.writeAll(csvBody);
            writer.flush();
            writer.close();
    }


    public static void main(String[] args) throws IOException {

        String source = "townhall_levels.csv";
        String destiantion="output.csv";
        ReadCSV.updateCSV(source, destiantion, "lol", 1, 1);

    }

}

In this code I am just trying to change A1 to "lol" as an example test to see if it works but I get the following error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at ReadCSV.updateCSV(ReadCSV.java:16)
    at ReadCSV.main(ReadCSV.java:30)

How should I go about achieving my goal and fixing the error?

CSV File: www.forumalliance.net/townhall_levels.csv

Shivam Paw
  • 203
  • 3
  • 14

2 Answers2

1

You're using ;as the separator to parse the file. Your file uses ,. Also, using a space as the quote char doesn't make much sense. You should use " instead, since that's also what your file uses.

JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255
0

The first values you're passing to row and col are 1 and 1. However, these need to start at 0.

David Koelle
  • 20,726
  • 23
  • 93
  • 130
  • thanks, that doesn't seem to have worked entirely though: http://gyazo.com/a7aedf1112615d5c951c0acb5aae7480 – Shivam Paw Jun 02 '15 at 16:23
  • You should debug your code to see that you're actually getting values that you expect. If you're not comfortable using a debugger (which I would recommend), even some System.out.println() statements will help you see what the problem might be – David Koelle Jun 02 '15 at 16:25