2016-09-18 1 views
0

解析しようとしているcsvファイルには、サンプルごとに複数の行を含むさまざまなサンプルが含まれています。たとえば、同じサンプル名 "S1"の10行があり、各行からCT値を取得する必要があります。私はCT値(ターゲット名で区別される)を組み合わせて、各サンプルのサンプルクラスを作成しようとしています。私はファイルを解析することができますが、私はループスルーして適切なデータを収集するのに苦労しています。csvファイルを解析して情報を収集するのに役立ちます

my Sampleクラスのコンストラクタには、サンプル名用とCT値用の11個のパラメータがあります。

私は長いことそれについて考えた後、必要なすべての情報をString配列のArrayListに集めようとしました。これはあまり役に立ちませんでした。これは、サンプルクラスのインスタンスとインスタンスを作成するための情報を一緒に収集する方法がわからなくなったためです。ここに私が試したものです。ここで

public void parseCSV(){ 

    String line = ""; 
    String csvSplitBy = ","; 

    try 
    { 
     Scanner scanner = new Scanner(new FileReader("/Users/Neema/Desktop/testData.csv")); 

     String[] data; 

     while (scanner.hasNextLine()) 
     { 
      line = scanner.nextLine(); 
      data = line.split(csvSplitBy); 

      if (data.length > 0 && data[0].equals("Well")) 
      { 
       while (scanner.hasNextLine()) 
       { 
        line = scanner.nextLine(); 
        data = line.split(csvSplitBy); 
        if (data.length > 4) 
        { 
         String sampleName = data[3]; 
         String dataType = data[4]; 
         String ctValue = data[11]; 
         String[] gatheredData = {sampleName, dataType, ctValue}; 
         parsedData.add(gatheredData); 
        } 
       } 
      } 
     } 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

は、CSVファイルには、任意のヘルプtestData2

感謝です!

+0

はあなたのサンプルクラスを使用すると、.CSVからのデータを持っているよりも多くのパラメータを持つコンストラクタを持っている問題ですか? – Prichmp

+0

必ずしもそうではありません。各サンプルには10個のデータポイントがありますが、各サンプルの1行につき1つのデータポイントで測定器から外れます。すべてのデータポイントが1行にあれば問題はほとんどありませんが、異なる行からデータを取得して同じサンプル名に関連付けると問題が発生します。 – sparks11

答えて

0

ご理解いただけると思います。必要なものはサンプル工場です。

class SampleFactory { 

    String sampleName; 
    List<TargetAndValue> sampleList; 


    SampleFactory(String sampleName) 
    { 
     this.sampleName = sampleName; 
    } 

    class TargetAndValue{ 
     String dataType; 
     String ctValue; 
     TargetAndValue(dataType, ctValue) 
     { 
      this.dataType = dataType; 
      this.ctValue = ctValue; 
     } 
    } 

    void addCtValue(dataType, ctValue) { //Instantiate a new TargetAndValue class } 

    Sample build(){ //Construct your Sample here } 

} 

必要なのは、SampleFactoriesのリストです。各行を解析する際に、適切なsampleNameを持つSampleFactoryを検索し、データポイントを追加します。すべてを解析したら、工場を使ってSampleオブジェクトを吐き出します。

+0

答えをありがとう!私はこれとそれをうまく実装することができました。 – sparks11

+0

Wooo !!私は助けている! – Prichmp

0

地図で試してみてください。例えば

public void parseCSV(){ 

    String line = ""; 
    String csvSplitBy = ","; 
    Map<String,List<String>> mapofSamples = new TreeMap<>(); // import java.util.Map; import java.util.TreeMap; 
    try 
    { 
     Scanner scanner = new Scanner(new FileReader("/Users/Neema/Desktop/testData.csv")); 

     String[] data; 

     while (scanner.hasNextLine()) 
     { 
     line = scanner.nextLine(); 
     data = line.split(csvSplitBy); 

     if (data.length > 0 && data[0].equals("Well")) 
     { 
      while (scanner.hasNextLine()) 
      { 
       line = scanner.nextLine(); 
       data = line.split(csvSplitBy); 
       if (data.length > 4) 
       { 
        if(!mapofSamples.containsKey(data[3])){ // if the map does not already contain the sample name add this name and a list with the value 
         mapofSamples.put(data[3],new ArrayList(){{add(data[11]);}}); 
        } 
        else{ 
         mapofSamples.get(data[3]).add(data[11]); // else just add the value to the corresponding sample names value list 
        } 

       } 
      } 
     } 
    } 

    for(String key: mapofSamples.keySet()){  // check if it prints the right keys and values 
     System.out.println("sample :" + key); 
     System.out.println("values :" + mapofSamples.get(key)); 
    } 
} 
catch (FileNotFoundException e) 
{ 
    e.printStackTrace(); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 

}

+0

私はサンプル工場の回答に行ってきましたが、これもうまくいくと思います。レスポンスありがとう! – sparks11

関連する問題