case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[64];
try {
// read data
int numBytes = inputStream.read(readBuffer);
inputStream.close();
//-------------------------------
//send the received data to the GUI
String result = new String(readBuffer,0,numBytes);
//-----------------------------
gui.setjtaReceived(result);
matcher(result,writer,df);
//gui.setjtaReceived(result);
}
catch (IOException e) {exceptionReport(e);}
上記のSerialPortEvent.Dat_Availableのスイッチの場合、リアルタイムで継続的なデータを受信しています。マッチャー関数は、以下に定義された関数を呼び出します
private void matcher(String str,FileWriter writer,DateFormat df) {
Matcher m1 = p1.matcher(str);
Matcher m2 = p2.matcher(str);
System.out.println(m1.group());
Calendar cal = Calendar.getInstance();
String match_heartBeat = null;
String match1 = m1.group();
int length1 = match1.length();
if(m2.find()){
String match2 = m2.group();
int length2 = match2.length();
match_heartBeat = match2.substring(2, length2-1);
//System.out.println(match1.subSequence(2, 4) + ";" + match_heartBeat);
}
String realTime = df.format(cal.getTime());
writer.append(realTime);
writer.append(',');
writer.append(match1.subSequence(2, length1-1));
writer.append(',');
writer.append(match_heartBeat);
writer.append('\n');
writer.flush();
}
外部のcsvファイルに書き込んだり、System.out.println(m1.group)またはSystem.out.println(match_heartBeat)を実行したりしようとすると、ファイルに書き込んだり、画面に印刷したりできませんでした。ただし、System.out.println(m1)は画面に出力されます。これを克服する方法はありますか?受信したデータをリアルタイムでデコードしようとしています。パターンは次のとおりです。
Pattern p1 = Pattern.compile("\\b(a)\\w*( )\\b");
Pattern p2 = Pattern.compile("\\b(')\\w*( )\\b");
アルファベットの「a」をスペースまで、「」をスペースまで検索します。プログラムの実行が開始されると、ファイル「ライター」が生成されます。ただし、デコードされたデータを追加できます。
サンプルデータ:
79 0009a017 009a047 9%0009a047 90009a046 9%0009a0469 0009a045 9%0009a0459'00 90009a045 9%0009a044 90009a044 9%0009a044 9
サンプル出力CSVファイル
System time , 17 , 00