搜索字符串,若不匹配,则删除行

本文关键字:删除行 不匹配 字符串 搜索 | 更新日期: 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 );