Список непрерывного списка из opencsv - PullRequest
0 голосов
/ 28 июня 2011

OK. Во-первых, я понял, что readAll () сохранял токенизированную строку в индексе массива от 0 до тех пор, пока не увидит символ новой строки (следующая строка файла csv), и снова начнет с 0. Я хочу, чтобы токенизированная строка сохранялась в непрерывном массив.

import au.com.bytecode.opencsv.CSVReader;

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

public class ReadTest {


    private static String data0 = "U:\\test-csv1.csv";
    private static String [] longArray = new String[50];
    private static String[] aString;
    private static List<String> longStr = new java.util.ArrayList<String>();
    private static int arrayCtr = 0;

    private static  void copyArray(String aTemp){

        longStr.add(arrayCtr, aTemp);
        System.out.println(arrayCtr);
        arrayCtr++;
        }

    private static void printElements(){

        for(int no =15;no<= 25;no++)
        System.out.print("\nelNo "+no+" is: "+longStr.get(no));
        System.out.println();
    }

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


    CSVReader reader1 = new CSVReader(new FileReader(data0),';');
    List aList;



        while ((aList = reader1.readAll())!= null){
            int outer= 0;
            String aTemp;
            String [] longArray = new String[50];

поэтому здесь я делаю цикл для копирования токенизированной строки для копирования в список с именем longStr.

            for (int counter= 0;counter <aList.size();counter++){
                String [] tempStr = (String[]) aList.get(counter);
                for (int j = 0; j < tempStr.length; j++){

                    aTemp = tempStr[j];
                    copyArray(aTemp);
                //  System.out.print(tempStr[j]);
                //  System.out.println();
                    System.out.print("strNo: " + j+"="+tempStr[j] + " "+"\n");
                    System.out.print("TEMP="+aTemp+"\n");


                }

это счетчик для получения номера строки.

                System.out.println("loop for no. of element:"+(++outer));
                System.out.println();


                        printElements();
            }

printElements - это метод для вывода списка элементов в longStr.

У меня проблема с перечислением всех элементов в longStr. Это то, что я имею до сих пор, я пытался расположить токенизированную строку из readAll () в непрерывный массив, как в longStr. Когда я пытался распечатать элементы после того, как readAll () завершил чтение файла csv, он непрерывно печатал элементы из printElements (), т.е. без остановки. Как мне решить эту проблему, и где я могу поместить printElements (), кроме как внутри while? Я всегда получаю сообщение об ошибке, например indexoutofbound, если помещаю его в другое место.

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Почему бы вам просто не позвонить reader.readAll(), а затем повторить этот список?

List<String[]> records = reader.readAll();
for (String[] record : records) {
  //do something with each record
}
0 голосов
/ 28 июня 2011

Я думаю

while ((aList = reader1.readAll())!= null){

- это бесконечный цикл. попробуйте

if((aList = reader1.readAll())!= null){
...