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_g
、engineRPM
およびを更新します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
内から呼び出されると、ループ全体が繰り返され、最後の行からの値のみが返されます。update
while((line=b.readLine())!=null)
目的 :upload
メソッドがメソッドを呼び出す
ときに一行でデータをアップロードしたいのでinput
、プログラムの流れはこのようになるはずです
update
Timer
メソッドは、メイン メソッドでa を使用して 5 秒ごとに呼び出されます。update
メソッドがメソッドを呼び出しますinput
。- コンパイラはループを実行し
while
ます。ループ中に csv ファイルから 1 行を読み取ります。その行はトークン化され、配列に格納されます。配列の選択された要素は、static
変数の更新に使用されます。 - このメソッドは、前述の
変数
update
で XIVELY を更新します。static
- ステップ 1 に進みます。
update
メソッドが再度呼び出されます。 - その後、
input
メソッドが再度呼び出されます。今回は、csv ファイルの次の行を使用してstatic
変数を更新します。