按行ID清除txt文件的一行

时间:2012-02-15 12:09:49

标签: c# text-files streamreader streamwriter

我已经全神贯注地寻找答案,但我无法在任何地方找到它。我需要能够通过行中的最后一个整数(ID号)清除txt文件中的一行,但我不知道该怎么做。请帮忙?基本上我认为我需要找到最后一个整数,如果它不等于输入,那么它将移动到下一行,直到找到正确的整数。然后该行被清除。以下是我的一些代码,显然不起作用:

public static void TicID(CommandArgs args)
    {
        if (args.Parameters.Count == 1)
        {
            if (i == 1)
            {
                try
                {
                    string idToDelete = args.Parameters[0];
                    StreamReader idreader = new StreamReader("Tickets.txt");
                    StreamWriter iddeleter = new StreamWriter("Tickets.txt");
                    string id = Convert.ToString(idreader.Read());
                    string line = null;
                    while (idreader.Peek() >= 0)
                    {
                        if (String.Compare(id, idToDelete) == 0)
                        {
                            iddeleter.WriteLine(line);
                        }
                        else
                        {
                            idreader.ReadLine();
                        }
                    }
                }

2 个答案:

答案 0 :(得分:0)

创建一个StreamReader对象,并使用StreamReader的实例方法ReadLine()逐行读入字符串数组或类似内容,然后在文本数组中找到您选择的行并删除它。

重要提示:

do { /*see description above*/ } while (streamReader.Peak() != -1);

答案 1 :(得分:0)

删除行的最直接方法是编写不应删除的行:

var idToDelete = "1";
var path = @"C:\Temp\Test.txt";
var lines = File.ReadAllLines(path);
using (var writer = new StreamWriter(path, false)) {
    for (var i = 0; i < lines.Length; i++) {
        var line = lines[i];
        //assuming it's a CSV file
        var cols = line.Split(',');
        var id = cols[cols.Length - 1];
        if (id != idToDelete) {
            writer.WriteLine(line);
        }
    }
}

这是LINQ方式:

var lines = from line in File.ReadAllLines(path)
        let cols = line.Split(',')
        let id = cols[cols.Length - 1]
        where id != idToDelete
        select line;
File.WriteAllLines(path, lines);