我发现使用正则表达式是最好的解决方案。
我现在唯一的问题是我的表达式可以包含重叠的值。比如下面的代码匹配到:
[)>6P24274885Q641JUN631170227A0000027L20LA6-98721L54321 ZESKG11556D5-13-19 7:48 AM0366D190513MAY05-13-19011BKLT32147Q76GT2SDELNOT>
数量只有 64,但我的表达式是把 1JUN 表达式中的“1”加到它的值上,这不好。那么,如果有人对防止重叠表达有任何建议吗?否则我会学习正则表达式方法。
//定义“Showmatch”以及找到匹配项时的操作
public void showMatch(string text, string expr, TextBox tb, Label lbl)
{
正则表达式 regex = new Regex(expr);
匹配 match = regex.Match(text);
if (match.Success)
{
tb.Text = match.Value;
}
else
{
tb.Text = "No Data Found";
}
}
//Set Regular Expression Parameters
DateTime scan_Date = DateTime.Today;
string part_Param = "(P)[0-9-]+";
string serial_Param = "S[0-9-]+";
string duns_Param = "(1JUN)[0-9]+";
string quant_Param = "Q[0-9]+";
string unknown_Param = "20L-B[a-zA-Z0-9]";
public void button1_Click(object sender, EventArgs e)
{
//Pop up window to select data source document
using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text Documents(*.txt)|*.txt", ValidateNames = true, Multiselect = true })
if (ofd.ShowDialog() == DialogResult.OK)
{
//Read Text Document From scanner
string[] raw_data = System.IO.File.ReadAllLines(ofd.FileName);
string mod_data = string.Join("", raw_data);
textBox1.Text = (mod_data);
tbScanDate.Text = scan_Date.ToString("dd.MM.yyyy");
showMatch(mod_data, part_Param, tbPartNumber, lblPartNumber);
showMatch(mod_data, serial_Param, tbSerialNumber, lblSerialNumber);
showMatch(mod_data, duns_Param, tbDunsNumber, lblDunsNumber);
showMatch(mod_data, quant_Param, tbQuantity, lblQuantity);
showMatch(mod_data, unknown_Param, tbOther, lblOther);
}