基於顯示的代碼..我是否在編寫正確的編碼,如果我想比較正在流入的數據?基本上是從部件檢測部分接收數據的重複
while(serialPort1.IsOpen)
開始例如第一串的接收數據被T12中29.5然後下一個字符串被T12中29.5隨後Ť20 24.5和上,從而基本上..什麼不可預料的要接下來收到。
我想程序中能夠檢測/計數外觀中部value..like的數量...
================= ===
[數量] | [重複次數]
12 | 2
===================但是當接收到另一個不同的號碼,
[數字] | [重複]
20 | 1
===================只要收到不同的號碼,號碼的計數器將被覆蓋並重置。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string time = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.ff");
RxString = serialPort1.ReadLine();
string[] split = RxString.Split('.');
string dp = split[1];
Char c = dp[0];
split[1] = c.ToString();
RxString = split[0] + "." + split[1];
while (serialPort1.IsOpen)
{
string[] number = RxString.Split(' ');
string unit = number[1];
int count = 1;
for(int i = 1; i < unit.Count(); i++)
{
if(unit[i-1] == unit[i])
count++;
else
count = 1;
if(count == 4)
{
//execute some parameters
}
}
}
this.Invoke(new EventHandler(DisplayText));
StreamWriter MyStreamWriter = new StreamWriter(@"C:\Users\acer\Documents\Data3.txt", true);
MyStreamWriter.Write(time + " " + RxString + "\r\n");
MyStreamWriter.Flush();
MyStreamWriter.Close();
}
編輯V2
爲什麼不會只擁有1個計數的前衛記錄數據?
string[] number = RxString.Split(' '); //split RxString by ' '
string unit = number[1]; //unit = unit no.
int count = 1;
for (int i = 1; i < unit.Count(); i++)
{
if (unit[i - 1] == unit[i])
count++;
else
{
count = 1;
StreamWriter MyStreamWriter = new StreamWriter(@"C:\Users\acer\Documents\Data3.txt", true); //True tell SW to append to file instead of overwriting
MyStreamWriter.Write(time + " " + RxString + "\r\n"); //Write time + string
MyStreamWriter.Flush();
MyStreamWriter.Close();
}
你期待的行爲是什麼?您是否想要覆蓋號碼並重置計數器,還是希望將新號碼存儲到適當的位置? – PMerlet
@Cubi如果count = 4,我會編輯這4個數據的時間然後記錄到DB中。如果計數!= 4,這些記錄將像往常一樣記錄在數據庫中 – Athena
您的問題對我來說沒有多大意義。看來你已經知道你在做什麼了。你需要什麼幫助?它有助於Sql部分還是什麼? – Fabjan