2017-11-03 32 views
1

こんにちは、これは私の最初の質問です。確かにしばらくの間探してから、何か助けにはならなかった。私はjavaとData Miningにはかなり新しいです。 問題があるので、CSVファイルからARFFに変換するデータを取得しようとしています(Wekaで正しく開くことができます) ポイントはCSVが壊れていることです私は2つの属性を持っています.1つは感情であり、もう1つはピクセルですが、実際にはピクセルは17の異なるピクセル値から作られています。 私はfirsts属性をListのArrayListに入れ、各リストは1つの要素で構成され、1つの感情を表します。 リストのArrayListは、各リストが私の17ピクセルの束であり、わたしはわかりませんが、私のコードは私の出力とそれに続く出力です。だからここJava:整数リストのArrayListを使ったCSV読み込み

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.nio.charset.Charset; 
import java.nio.file.Files; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class CSVformat { 

    private static ArrayList<List<Integer>> Emotions = new ArrayList<List<Integer>>(); 
    private static ArrayList<List<Integer>> Pixels = new ArrayList<List<Integer>>(); 

    public CSVformat(ArrayList<List<Integer>> emotions, ArrayList<List<Integer>> pixels){ 
    this.setEmotions(emotions); 
    this.setPixels(pixels); 
    } 

    /** 
    * @return the emotions 
    */ 
    public ArrayList<List<Integer>> getEmotions() { 
     return Emotions; 
    } 

    /** 
    * @param emotions the emotions to set 
    */ 
    public void setEmotions(ArrayList<List<Integer>> emotions) { 
     CSVformat.Emotions = emotions; 
    } 

    /** 
    * @return the pixels 
    */ 
    public ArrayList<List<Integer>> getPixels() { 
     return Pixels; 
    } 

    /** 
    * @param pixels the pixels to set 
    */ 
    public void setPixels(ArrayList<List<Integer>> pixels) { 
     CSVformat.Pixels = pixels; 
    } 

    /*public void readData(String fileName) throws IOException { 
     int count = 0; 
     String file = fileName; 
     try { 
      BufferedReader br = new BufferedReader(new FileReader(file)); 
      String line = ""; 
      while ((line = br.readLine()) != null) { 

       Emotions.add(line.split(",")); 

       String[][] v = (String[][]) bank.toArray(new String[bank.size()][12]); 

      } 
     } catch (FileNotFoundException e) { 

     } 
    }*/ 

    public static void fillArrayList(String fileName) throws FileNotFoundException { 
     List<String> list = new ArrayList<String>(); 
     List<Integer> emotions = new ArrayList<Integer>(); 
     List<Integer> pixels = new ArrayList<Integer>(); 

     File file = new File(fileName); 
     //Scanner scan = new Scanner(new File(fileName)); 
     if(file.exists()){ 
      try { 
       list = Files.readAllLines(file.toPath(),Charset.defaultCharset()); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
      if(list.isEmpty()) 
       //scan.close(); 
       return; 
     } 
     for(String line : list.subList(1, list.size())){ 
     String[] res = line.split(","); 
     String[] arr= res[1].split(" "); 
     emotions.add(Integer.parseInt(res[0])); 
     for(int i=0;i<arr.length;i++){ 
      pixels.add(Integer.parseInt(arr[i])); 

      } 

     } 
    Emotions.add(emotions); 
    Pixels.add(pixels); 
    System.out.println(Emotions); 
    System.out.println(Pixels); 
    }} 

は、私が使用しています短縮のCSVです:

emotion,pixels 
0,70 80 82 72 58 58 60 63 54 58 60 48 89 115 121 119 115 
1,70 80 82 72 58 58 60 63 54 58 60 48 89 115 121 119 115 
3,70 80 82 72 58 58 60 63 54 58 60 48 89 115 121 119 115 

(私はあなたが一種の壊れて語ったとしてCSVが、それは私の授業のための1つを与えられ、それが理由だということに注意してくださいIこのCSVためにこのコードを実行することにより、

最後に)最初にそれを修正しようとしている私は、出力としてこれを持っている:

[[0, 1, 3]] 
[[70, 80, 82, 72, 58, 58, 60, 63, 54, 58, 60, 48, 89, 115, 121, 119, 115, 70, 80, 82, 72, 58, 58, 60, 63, 54, 58, 60, 48, 89, 115, 121, 119, 115, 70, 80, 82, 72, 58, 58, 60, 63, 54, 58, 60, 48, 89, 115, 121, 119, 115]] 

私がこれを望んでいる間:

[[0], [1], [3]] 
[[70, 80, 82, 72, 58, 58, 60, 63, 54, 58, 60, 48, 89, 115, 121, 119, 115], [70, 80, 82, 72, 58, 58, 60, 63, 54, 58, 60, 48, 89, 115, 121, 119, 115], [70, 80, 82, 72, 58, 58, 60, 63, 54, 58, 60, 48, 89, 115, 121, 119, 115]] 

私は晴れていることを希望します。 私が知っているのは、addメソッドをリストに使用しているからですが、行ごとに読み込んだスキャナやその他のメソッドを使用しても、このタスクを完了することはできませんでした。 ArrayListに再び入れる前にリストをクリアしようとしましたが、完全にEMPTYのArrayListを与えました。

ありがとうございました。

+0

あなた自身? OpenCSVライブラリを使用してください。 – m0skit0

+0

こんにちはm0skit0、 これはこのタスクの目的ではありません。できれば使用しないでください。 –

答えて

3

あなたがリスト

private static ArrayList<List<Integer>> Emotions = new ArrayList<List<Integer>>(); 

のリストを持っていて、

List<Integer> emotions = new ArrayList<Integer>(); 

リストにあなたのファイルを読んで、あなたは印刷する場合リスト

Emotions.add(emotions); 

のリストにそれを保存しますあなたはそれを得る:

あなたはそれが異なる持っているしたい場合は

、あなたが処理するすべてのループ/ラインのためにあなたのList<Integer> emotionsを作成する必要があり、そう最終的にあなたのfillArrayList方法は次のようになります。なぜによって解析している

public static void fillArrayList(String fileName) throws FileNotFoundException { 
    List<String> list = new ArrayList<String>(); 
    File file = new File(fileName); 
    if (file.exists()) { 
     try { 
      list = Files.readAllLines(file.toPath(), Charset.defaultCharset()); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     if (list.isEmpty()) 
      return; 
    } 

    for (String line : list.subList(1, list.size())) { 
     System.out.println(line); 

     String[] res = line.split(","); 
     String[] arr = res[1].split(" "); 

     List<Integer> emotions = new ArrayList<Integer>(); 
     emotions.add(Integer.parseInt(res[0])); 
     Emotions.add(emotions); 

     List<Integer> pixels = new ArrayList<Integer>(); 
     for (int i = 0; i < arr.length; i++) { 
      pixels.add(Integer.parseInt(arr[i])); 
     } 
     Pixels.add(pixels); 
    } 
} 
+0

ありがとう、私はちょうど今とても明確に見えます、そして、私は少し前に自分でそれを見たことがないと思っています。 ありがとうございます:) –

関連する問題