按行ID清除txt文件的一行

本文关键字:一行 ID 清除 txt 文件 按行 | 更新日期: 2023-09-27 18:24:45

我到处寻找答案,但在任何地方都找不到。我需要能够通过行中的最后一个整数(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();
                        }
                    }
                }

按行ID清除txt文件的一行

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

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);

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

重要提示:

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