搜索字符串,若不匹配,则删除行
本文关键字:删除行 不匹配 字符串 搜索 | 更新日期: 2023-09-27 18:27:40
我正在寻找打开文本文件的代码,然后逐行读取文本文件,如果文本文件中的行(每行将存储大约5个值)不包含某个值,例如"hart",那么我想删除该行。我正在使用c#和vs2012,有人能告诉我如何做到这一点吗?正在读取的文件是csv文件。我这里没有代码示例,因为我当前的代码不起作用,我觉得givin示例只会比要求某人向我展示一种全新的方法更令人困惑。
我已经添加了我目前拥有的代码,它将所有数据添加到一个文本文件中,但我需要弄清楚的代码是获取这些结果并过滤它们
foreach (DataRow dr in this.CalcDataSet.Items)
{
foreach (object field in dr.ItemArray)
{
str.Append(field.ToString() + ",");
}
str.Replace(",", "'n", str.Length - 1, 1);
}
try
{
System.IO.File.WriteAllText(Filepath, str.ToString());
}
catch (Exception ex)
{
MessageBox.Show("Write Error :" + ex.Message);
}
var lines = System.IO.File.ReadAllLines(Filepath).ToList();
var acceptedLines = new List<string>();
foreach (var line in lines)
if (Matches(line))
acceptedLines.Add(line);
System.IO.File.WriteAllLines(Filepath, acceptedLines);
}
private bool Matches(string s)
{
if (s == cmbClientList.SelectedText.ToString())
{
return true;
}
else return false;
}
使用TextFieldParser类打开并读取文件,并将值拆分为一个数组。然后,您可以检查每行上的每个项目,看看它是否包含您想要的值。
如果该行包含该值,则将该行写入新文件。如果它不包含值,则不要写入新文件。
完成后,关闭输入和输出文件。然后删除原始输入文件并重命名输出文件。
您无法在适当的位置轻松读取和修改文本文件。
另一种选择是使用TextFieldParser
进行读取并写入内存流。最后,从内存流中写回原始文件。如果文件足够小,可以放在内存中,这将起作用。
这基本上可以实现您想要的:
var lines = System.IO.File.ReadAllLines("somefile.csv");
var acceptedLines = new List<string>();
foreach (var line in lines)
if (Matches(line))
acceptedLines.Add(line);
System.IO.File.WriteAllLines("output.csv", acceptedLines);
private bool Matches(string s) {
// Whatever you want, return true to include the line, false to exclude)
}
您可以执行此
string[] lines = File.ReadAllLines("yourfile.csv");
List<string> linesToWrite = new List<string>();
int currentCount = 0;
foreach(string s in lines)
{
if(s.Contains("YourKeyValue"))
linesToWrite.Add(s);
}
File.WriteAllLines("yourfile.csv", linesToWrite );