Очистка строки текстового файла по идентификатору строки - PullRequest
0 голосов
/ 15 февраля 2012

Я искал ответ на этот вопрос, но нигде не могу его найти. Мне нужно иметь возможность очистить строку из 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 голосов
/ 15 февраля 2012

Самый простой способ удаления строк - написать строки, которые не следует удалять:

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);
0 голосов
/ 15 февраля 2012

Создайте объект StreamReader и построчно читайте в строковый массив или что-то в этом роде, используя метод экземпляра StreamReader ReadLine (), а затем найдите вашу предпочтительную строку в текстовом массиве и удалите ее.

Важное примечание:

do { /*see description above*/ } while (streamReader.Peak() != -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...