2017-03-24 12 views
1

カンマ区切りの値を持つ.csvファイルが提供されています。それらは"2016-03-23,106.129997,25703500"の順で"date,price,volume"の順に並べられています。パラメータには既にコードを検証するプログラムによって決定されるプリセット値があります。プログラムがランダムな日付を入力すると:"2016-03-23"。コードは、日付と等しい.csvファイル内の場所を出力する必要があります。コードが入力と等しい日付を検出すると、その行の2番目の列(価格は倍数)のみが返されます。.csvファイルまたは文字列を比較して類似性をどのように比較しますか?

私がこれまでに撮影した手順は次のとおりです。

1.は、.csvファイルが含まれているパラメータを読みます。 .csvファイルの最初の列と日付パラメータを比較して、等しいかどうかを確認します。 (エコー)。このコードを生成するかどうか分かっていますが、.csvファイル全体が返されます。

2.文字列を含むParameterも.csvファイルであり、それが列であるかのように比較します。これで最初の問題が再現されますが、2つの.csvファイルを読み込む方法がわかりません。

質問:

私はダブルを返却する必要があります。私のコードでは、値の宣言が範囲外に設定されています。それを変換しようとすると:「ダブル引数には適用されませんタイプのメソッドparseDouble(String)(String[])

はどのようにだけではなく、列、.csvファイル内の特定の部分を正確に特定することができますが、同様に行。 [1]と同様に行を決定するために使用される列を決定する場合

を.csvファイルの各行を生成しますforループを作成します。私は行われるべきだと思う何

public static double getPrice(String stockFileName, String date) { 

    try { 
     BufferedReader br = new BufferedReader(new FileReader(stockFileName)); 
     String line = ""; 
     String unparsedFile = ""; 
     Double Price; 
     while ((line = br.readLine()) != null) {} 
     br.close(); 

     String[] Ans = unparsedFile.split(","); 
     for (String item: Ans) { 
      if (Ans[1].equals(date)) { 
       double aDouble = Double.parseDouble(Ans); 
       return Ans; 

      } 
     } 
    } catch(IOException ex) { 
     System.out.println("Error"); 
    } 

} 

。各行を配列の文字列値に変換し、コードが日付と等しいかどうかをチェックします(列全体を生成しないようにする)。一旦行が決定されると、価格であるその行の[2]に戻ります。

ただし、パラメータがString stockFileNameに既に設定されている場合、それは私は文字列内の行の[1]が日付と等しいかどうかチェックする必要がありますか?もしそうなら、単にその行の[2]を返しますか?

答えて

0

Javaライブラリを使用して、CSVファイル を解析します(ホイールを再作成する必要はありません)。 チェックこのjarはあなたのクラスパスにjarファイルを持っていたら、 あなたはCSVの各行をループを次のように を提出し、 は日付を持っていることを列の一致を見て、使用することができますhttps://sourceforge.net/projects/opencsv/

を提出します一致する行の価格が列に表示されます。

CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); 
String [] nextLine; 
while ((nextLine = reader.readNext()) != null) { 
    // nextLine[] is an array of values from the line 
    System.out.println(nextLine[0] + nextLine[1] + "etc..."); 
} 
+0

ライブラリを使用することはできません。 – Gintoki

0

私はあなたの問題はあなたのwhileループが空であるので、あなたが株式のファイルの行のすべてが、実際に彼らと何もしていないを読んでいるということかもしれないと思います。行番号が必要な場合は、カウンタを保持するだけで、行全体が必要な場合は、何かを行う必要がある場合は、戻り直前に可変行になります。

public static double getPrice(String stockFileName, String date) { 

    try { 
    BufferedReader br = new BufferedReader(new FileReader(stockFileName)); 
    String line = ""; 
    String unparsedFile = ""; 
    Double Price; 
    while ((line = br.readLine()) != null) { 
     String[] Ans = line.split(","); 
     for (String item : Ans){ 
     if(Ans[1].equals(date)){ 
      double aDouble = Double.parseDouble(Ans[2]);  
      return aDouble; 
     } 
     } 
    } 
    br.close(); 

    } catch (IOException ex) { 
    System.out.println("Error"); 
    } 
    return null; 
} 
関連する問題