0

CSVファイルから行を読み取るための私のコードは次のとおりです。

private void input()throws IOException
    {
        //FILE READER FIELDS
        StringTokenizer st=null;
        BufferedReader b=new BufferedReader(new FileReader(csvfile));
         String line=null;
         int count=0;
         while((line=b.readLine())!=null)
            {   

                count+=1;
                if(count==1)
                {
                    continue;
                }
                else
                {   

                    String[]  arr=new String[19];
                    st=new StringTokenizer(line,",");
                    int i=0;
                    while(st.hasMoreTokens())
                    {
                    arr[i]=st.nextToken();
                    i++;
                    }
                    for(int j=2;j<arr.length;j++)
                    {
                        if(j==11)
                        {
                            calib_g=Double.parseDouble(arr[j]);

                        }
                        if(j==12)
                        {
                            coolant_temp=Double.parseDouble(arr[j]);

                        }
                        if(j==13)
                        {
                            engineRPM=Double.parseDouble(arr[j]);
                        }
                    }

                }
            }
         }

コードから推測できるように、上記のinputメソッドの目的は、ファイルを 2 行目から読み込んで、閲覧した行から取得したトークンを、長さがあらかじめ決められた配列に格納することです。次に、配列から選択した要素を使用して、静的変数calib_gengineRPMおよびを更新しますcoolant_temp

これらの変数は、以下のメソッドによって使用され、COSM (以前は pachube が現在 xively) をこれらの値で更新します。

private void update(int feedid) throws PachubeException, IOException

{
Feed f = this.pachube.getFeed(feedid);

System.out.println("XML is :" + f.toXML());

input();
flag=false;

   System.out.println("updating ...");

     f.updateDatastream(8345, calib_g);
     f.updateDatastream(6274, coolant_temp);
     f.updateDatastream(1044, engineRPM);
       System.out.println("updated");

}

問題 :メソッド がメソッドinput内から呼び出されると、ループ全体が繰り返され、最後の行からの値のみが返されます。updatewhile((line=b.readLine())!=null)

目的 :uploadメソッドがメソッドを呼び出す ときに一行でデータをアップロードしたいのでinput、プログラムの流れはこのようになるはずです

  • updateTimerメソッドは、メイン メソッドでa を使用して 5 秒ごとに呼び出されます。
  • updateメソッドがメソッドを呼び出しますinput
  • コンパイラはループを実行しwhileます。ループ中に csv ファイルから 1 行を読み取ります。その行はトークン化され、配列に格納されます。配列の選択された要素は、static変数の更新に使用されます。
  • このメソッドは、前述の 変数updateで XIVELY を更新します。static
  • ステップ 1 に進みます。updateメソッドが再度呼び出されます。
  • その後、inputメソッドが再度呼び出されます。今回は、csv ファイルの次の行を使用してstatic変数を更新します。
4

0 に答える 0