我正在处理数据网格中的数据,并想过滤掉任何不包含特定文本的行。是否有可能做到这一点? 下面的代码是我读取数据的地方。我不想读取/处理不包含“ 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();
答案 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());