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