【发布时间】:2019-09-29 23:01:39
【问题描述】:
您好,我正在使用这个 c# windows 窗体 我想在(嗯)之前得到这个数字 有时会超过 50 个数据。
示例格式:
19/09/27 9:17:37
SOT404 Sn_Ni LEADSr.rtn
1
Batch no. 1
Date / Shift: 19-09-27A
User Name: OLIVER
[DATA]
1 Sn 10.259(um)
2 Sn 10.965(um)
3 Sn 10.921(um)
4 Sn 9.690(um)
5 Sn 9.774(um)
6 Sn 10.312(um)
Mean Std. dev. Range
Sn 10.320 0.5433 1.275
Max. Min. Cpk
Sn 10.965 9.690 2.04
UCL LCL
Sn 15.000 7.000
预期输出:
10.259
10.965
10.921
9.690
9.774
10.312
我现在只是将它存储在数组中,不知道下一步。
private void FormatRawData_2(string rawData)
{
string[] data = Regex.Split(rawData, "\r\n");
if (rawData.Contains("[DATA]"))
{
int index = Array.IndexOf(data, "[DATA]");
}
else {
MessageBox.Show("Received data is not complete");
}
}
更新我的代码: 笔记: Config.DataColumn 的值等于 3
private void FormatRawData_2(string rawData)
{
string[] data = Regex.Split(rawData, "\r\n");
if (rawData.Contains("[DATA]"))
{
int index = Array.IndexOf(data, "[DATA]");
//int markIndex = Array.IndexOf(data, "");
for (int ctr = index + 1; ctr < data.Length;ctr++ )
{
string[] lineData = Regex.Split(data[ctr], @"[\s+\t\n]");
int dataCtr = 1;
for (int lineCtr = 0; lineCtr < lineData.Length - 1; lineCtr++)
{
if (lineData[lineCtr] != string.Empty)
{
if (dataCtr == Config.DataColumn)
{
SetTextProcessed(lineData[lineCtr]);
break;
}
dataCtr++;
}
}
}
}
else {
}
}
现在得到结果:
10.259(um)
10.965(um)
10.921(um)
9.690(um)
9.774(um)
10.312(um)
dev.
0.5433
9.690
已经很接近了。
【问题讨论】:
-
每一行都可以找到(um)的索引:
indexEnd。然后反向搜索indexStart处的第一个空格字符。然后取 indexStart+1 和 indexEnd-1 之间的子字符串。根据格式,似乎 indexEnd 对于每一行都是相同的。 -
但它并不总是(嗯)它有时会改变括号内的文本字符。我不明白你的意思我在这方面有点新
-
它并不总是(嗯)它有时会改变括号内的文本字符所以你能定义你需要的模式来识别你想要的数据吗?您如何知道需要开始收集数据、数据的格式以及如何知道需要停止收集数据?
-
我无法控制其他程序生成的格式