2017-05-30 16 views
0

CSVファイルから入力を読み取るプログラムを作成しましたが、成功しました。しかし、私は1つの特定の行を選択する必要があり、私は別の行から1つの値を減算したい。 1行の処理にはどうすればよいですか。 これは私が得た出力は、タスクが誰も私を助けることができる私は、ABC の販売量からABCの購入量を減算する必要があるjavaで入力されたCSVファイルから特定の値の行を選択して計算する方法

Stock Id|Side|Company|Quantity| 
--------|----|-------|--------| 
1  |Buy |ABC |10  | 
--------|----|-------|--------| 
2  |Sell|XYZ |15  | 
--------|----|-------|--------| 
3  |Sell|ABC |13  | 
--------|----|-------|--------| 
4  |Buy |XYZ |10  | 
--------|----|-------|--------| 
5  |Buy |XYZ |8  | 

ある

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.StringTokenizer; 

public class Readline { 
private static String slide; 
private static Iterable<String[]> rows; 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
String fileName = "C:/Users/USER/Documents/SOES - Input.csv"; 

ArrayList<Integer> margins = new ArrayList<>(); 
BufferedReader br; 
String line, token = null; 
int i; 
try { 
    br = new BufferedReader(new FileReader(fileName)); 
    try { 
     while ((line = br.readLine()) != null) { 
      StringTokenizer st = new StringTokenizer(line, ",\""); 
      i = 0; 
      while (st.hasMoreTokens()) { 
       token = st.nextToken(); 
       if (margins.size() <= i) { 
        margins.add((Integer) token.length()); 
       } else { 
        margins.set(
          i, 
          Math.max(margins.get(i), 
            (Integer) token.length())); 
       } 
       i++; 
      } 
     } 

     br = new BufferedReader(new FileReader(fileName)); 
     while ((line = br.readLine()) != null) { 
      StringTokenizer st = new StringTokenizer(line, ",\""); 
      i = 0; 
      while (st.hasMoreTokens()) { 
       token = st.nextToken(); 
       System.out.print(token); 
       for (int j = 0; j < margins.get(i) - token.length(); j++) { 
        System.out.print(" "); 
       } 
       System.out.print("|"); 
       i++; 
      } 
      System.out.println(); 




     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
    catch (FileNotFoundException e) 
    { 
    e.printStackTrace(); 
    } 
    } 
    } 

を書いたコードです。 .. ??

+0

減算後のみ保存しますか?あなたの望む結果は何ですか?いくつかのサンプルを与える。 – YuVi

+0

在庫ID、サイド、会社、数量 1、購入する、ABC、10,0、閉鎖 2、販売、XYZ、15,0、閉店 3、販売、ABC、13,3、オープン 4、 XYZ、10,0、クローズド 5、購入、XYZ、8,3、オープン – vishnu

答えて

0

StringTokenizerは、.csvファイルの値が通常カンマで区切られているので、ここでは適切な選択ではないと思います。だから、単に配列として各行を解析し、必要な値をチェックすることがあります。

ArrayList<String[]> rows = new ArrayList<>(); 
... 
    while ((line = br.readLine()) != null) { 
    rows.add(line.split(",")); 
... 

あなたの行を持ってたら、それぞれの行を反復処理、第二の要素を取得する - それの名前を、第一取得 - 側と第三の量であります:

int totalQuantity = 0; 
for (String[] row : rows) 
{ 
    if (row[2].equals("ABC)) 
    { 
     if (row[1].equals("Sell")) 
     { 
       totalQuantity -= Integer.parseInt(row[3]); 
     } 
     else 
     { 
       totalQuantity += Integer.parseInt(row[3]); 
     } 
    } 
} 
+0

正常に構築されたようですが....出力はありません。 – vishnu

関連する問題