删除文本不包含值的csv行

时间:2018-12-21 00:27:09

标签: c#

我正在处理数据网格中的数据,并想过滤掉任何不包含特定文本的行。是否有可能做到这一点? 下面的代码是我读取数据的地方。我不想读取/处理不包含“ INTEREST”一词的行

while (fileReader.Peek() != -1)
                        {
                            fileRow = fileReader.ReadLine();
                            fileRow = fileRow.Replace("\"", "");
                   //       fileRow = fileRow.Replace("-", "");
                            fileDataField = fileRow.Split(delimiter);
                            fileDataField = fileRow.Split(',');
                            gridLGTCash.Rows.Add(fileDataField);
                        }
                        fileReader.Close();

3 个答案:

答案 0 :(得分:0)

如果您想跳过所有包含“ INTEREST”的行,请使用Contains检查该字符串:

while (fileReader.Peek() != -1)
{
  fileRow = fileReader.ReadLine();
  if (!fileRow.Contains("INTEREST"))  //<--- Add a test here
  {
    fileRow = fileRow.Replace("\"", "");
    //       fileRow = fileRow.Replace("-", "");
    fileDataField = fileRow.Split(delimiter);
    fileDataField = fileRow.Split(',');
    gridLGTCash.Rows.Add(fileDataField);
  }
}
fileReader.Close();

答案 1 :(得分:0)

这是我的解决办法,可确保连续无记录或空白记录。 cvs中的空白行看起来像这样[,,,,,, ..]。

using System.Text.RegularExpressions;
:
:
do {
     fileRow = fileReader.ReadLine();
     if (!Regex.IsMatch(fileRow, @"^,*$")) 
     {
        fileRow = fileRow.Replace("\"", "");
        //       fileRow = fileRow.Replace("-", "");
        fileDataField = fileRow.Split(delimiter);
        fileDataField = fileRow.Split(',');
        gridLGTCash.Rows.Add(fileDataField);
      }
  }while (fileReader.Peek() != -1)
fileReader.Close();

答案 2 :(得分:0)

首先,使用专用的CSV阅读器会更好。 string.Split()的表现不佳,并且在各种边缘情况下均失败。该框架内置了三个(至少),但是您可以通过NuGet轻松获得其他(更好的imo)选项。这可能会为您避免整个问题。

假设您暂时无法执行此操作,那么我也不会使用Peek()。使用File.ReadLines()方法(请注意:这与File.ReadAllLines()相同,可以是内存消耗):

var lines = File.ReadLines("filename here"))
                .Select(line => line.Replace("\"", "").Split(','))
                .Where(line => line.Any(field => field.Trim().Length > 0));
gridLGTCash.Rows.AddRange(lines.ToArray());