【问题标题】:How to create sub strings from raw bar code data with variable delimiter's/ delimiter order如何使用可变分隔符/分隔符顺序从原始条形码数据创建子字符串
【发布时间】:2019-06-24 18:28:34
【问题描述】:

我需要能够根据数据标识符从大字符串中提取子字符串。提取特定数据字符串的正确方法是什么?

首先,我是一名合作学生/实习生,所以请放轻松。

我正在为独立的手持计算机扫描仪编写一个程序,它将在内部存储扫描的数据并在对接时将其传输到计算机。 (此特定站点上没有 RF 或无线)。我可以扫描条形码并查看完整的数据字符串没有问题,当我尝试将数据字符串分成我无法通过的可变部分(零件编号、供应商 ID、日期等)时。我可以根据每个标识符将字符串拆分为一个字符串数组,但我不确定如何根据前缀数据标识符调用特定的数据集,以便我可以将所需的信息放入数据网格或正确导出到 Excel。

最终我希望能够定义所有不同的数据标识符(并且有很多),并让我的程序通过每次扫描并挑选出所需的信息。由于这对我来说是一次学习经历,所以我不是要求有人为我写它,而是为我指明正确的方向:)

【问题讨论】:

  • 鉴于这些标识符是什么,拆分字符串不是问题。如果不告诉我们这些是什么,就很难回答。那么如何从字符串中识别PartNoVendor IDDate 等呢?有什么限制?如果您告诉我们,我们可以从那里开始。

标签: c# substring


【解决方案1】:

如果扫描之间的标识符始终相同,我会使用 string.Split

string[] stringArray = scannedString.Split(new string[]{"identifier1", "identifier2"}, StringSplitOptions.RemoveEmptyEntries);

【讨论】:

    【解决方案2】:

    我发现使用正则表达式是最好的解决方案。

    我现在唯一的问题是我的表达式可以包含重叠的值。比如下面的代码匹配到:

    [)>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);
    
    
    
                }
    

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多