-3

我正在寻找打开文本文件的代码,然后逐行读取文本文件,如果文本文件中的行(每行将存储大约 5 个值)不包含某个值,例如“hart”,那么我想删除该行。我正在使用 c# 和 vs2012,谁能告诉我如何做到这一点?正在读取的文件是 csv 文件。我这里没有代码示例,因为我当前的代码不起作用,我觉得给出示例只会引起更多的混乱,而不是要求某人向我展示一种全新的方法来做到这一点。

我已经添加了我目前拥有的代码,它将所有数据添加到文本文件中,但是我需要弄清楚的代码是获取这些结果并过滤它们

     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;
    }
4

3 回答 3

1

这基本上会做你想要的:

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)
}
于 2013-08-13T13:29:39.193 回答
1

使用TextFieldParser类打开和读取文件,并将值拆分为一个数组。然后,您可以检查每行上的每个项目,看看它是否包含您想要的值。

如果该行包含该值,则将该行写入一个新文件。如果它不包含该值,则不要写入新文件。

完成后,关闭输入和输出文件。然后删除原始输入文件并重命名输出文件。

您不能轻松地就地阅读和修改文本文件。

另一种选择是读取TextFieldParser和写入内存流。最后,从内存流写回原始文件。如果文件足够小以适合内存,这将起作用。

于 2013-08-13T13:27:22.837 回答
0

你可以这样做

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 );
于 2013-08-13T13:40:51.127 回答