首页 > 解决方案 > 通过字符串匹配跳过记录

问题描述

我正在循环浏览一个充满产品的大型 excel 文件。我们只想处理 Brand = x 或 Product = 'y' 的行。下面的代码工作有一个可预测的过滤器,即。Product1,但是我们不确定 xsl 文件将保存哪些数据,它可能类似于“Product1 (buy me)”这样的逻辑不会通过,并且记录将被忽略。

我们可以使用什么技术来匹配产品名称和过滤器?正则表达式、模式匹配等?还是我只需要拆分过滤器并循环遍历每个过滤器?似乎应该有一种更优雅的方式。

    private static bool SkipRecord(string strFilters, string key, DataRow row)
    {
     //include the record if it matches our filter
     var strField = row[key].ToString();
     bool skip = true;
     if (strField != null && strField != "")
     {
         skip = !strFilters.ToLower().Contains(strField.ToLower());
     }
     return skip;
 }

 List<ResultRow> xlsRows = new List<ResultRow>();
 foreach (DataRow row in dataTable.Rows)
 {
    if (SkipRecord(f.brandFlag, "Brand", row) && SkipRecord(f.productFlag, "Name", row))
        continue;
 }

appSettings.json

"CustomSettings": {
"BrandFlag": "Gibson|Fender|Jackson",
"ProductFlag": "Product 1|ProductTwo|Product3",
}

标签: c#string.net-core

解决方案


(先发表评论,我认为第一种方法缺少

return skip;

线)。

对于您提到的特定情况,如果您更改“包含”参数的顺序,它将起作用:

skip = !strField.ToLower().Contains(strFilters.ToLower());

推荐阅读