Удалить конкретную строку из текстового файла? - PullRequest
23 голосов
/ 07 августа 2009

Мне нужно удалить точную строку из текстового файла, но я не могу на всю жизнь тренировки, как это сделать.

Любые предложения или примеры будут с благодарностью?

Смежные вопросы

Эффективный способ удаления строки из текстового файла (C #)

Ответы [ 9 ]

40 голосов
/ 07 августа 2009

Если строка, которую вы хотите удалить, основана на содержимом строки:

string line = null;
string line_to_delete = "the line i want to delete";

using (StreamReader reader = new StreamReader("C:\\input")) {
    using (StreamWriter writer = new StreamWriter("C:\\output")) {
        while ((line = reader.ReadLine()) != null) {
            if (String.Compare(line, line_to_delete) == 0)
                continue;

            writer.WriteLine(line);
        }
    }
}

Или если оно основано на номере строки:

string line = null;
int line_number = 0;
int line_to_delete = 12;

using (StreamReader reader = new StreamReader("C:\\input")) {
    using (StreamWriter writer = new StreamWriter("C:\\output")) {
        while ((line = reader.ReadLine()) != null) {
            line_number++;

            if (line_number == line_to_delete)
                continue;

            writer.WriteLine(line);
        }
    }
}
13 голосов
/ 07 августа 2009

Лучший способ сделать это - открыть файл в текстовом режиме, прочитать каждую строку с помощью ReadLine (), а затем записать его в новый файл с помощью WriteLine (), пропустив одну строку, которую вы хотите удалить.

Насколько я знаю, нет общей функции удаления строки из файла.

7 голосов
/ 07 августа 2009

Один из способов сделать это, если файл не очень большой, это загрузить все строки в массив:

string[] lines = File.ReadAllLines("filename.txt");
string[] newLines = RemoveUnnecessaryLine(lines);
File.WriteAllLines("filename.txt", newLines);
2 голосов
/ 16 ноября 2015

Не требуется научный код Rocket. Надеюсь, этот простой и краткий код поможет .

List linesList = File.ReadAllLines("myFile.txt").ToList();            
linesList.RemoveAt(0);
File.WriteAllLines("myFile.txt"), linesList.ToArray());

ИЛИ используйте это

public void DeleteLinesFromFile(string strLineToDelete)
    {
        string strFilePath = "Provide the path of the text file";
        string strSearchText = strLineToDelete;
        string strOldText;
        string n = "";
        StreamReader sr = File.OpenText(strFilePath);
        while ((strOldText = sr.ReadLine()) != null)
        {
            if (!strOldText.Contains(strSearchText))
            {
                n += strOldText + Environment.NewLine;
            }
        }
        sr.Close();
        File.WriteAllText(strFilePath, n);
    }
2 голосов
/ 07 августа 2009

Вы можете использовать для этого дженерики C #, чтобы упростить процесс:

        var file = new List<string>(System.IO.File.ReadAllLines("C:\\path"));
        file.RemoveAt(12);
        File.WriteAllLines("C:\\path", file.ToArray());
1 голос
/ 07 августа 2009
  1. Читать и запоминать каждую строку

  2. Определите, кого вы хотите избавиться из

  3. Забудь об этом

  4. Напиши остальное поверх файл

0 голосов
/ 22 декабря 2017

Это можно сделать в три этапа:

// 1. Read the content of the file
string[] readText = File.ReadAllLines(path);

// 2. Empty the file
File.WriteAllText(path, String.Empty);

// 3. Fill up again, but without the deleted line
using (StreamWriter writer = new StreamWriter(path))
{
    foreach (string s in readText)
    {
        if (!s.Equals(lineToBeRemoved))
        {
            writer.WriteLine(s);
        }
    }
}
0 голосов
/ 14 октября 2009

Что?Использовать файл, открыть позицию, затем стереть строку, используя ноль.

Понял?Простой, потоковый, без массива, который потребляет память, быстрый.

Эта работа на vb .. Пример строки поиска culture = id, где culture - это namevalue, а id - значение, и мы хотим изменить его на culture = en * 1005.*

Fileopen(1, "text.ini")
dim line as string
dim currentpos as long
while true
    line = lineinput(1)
    dim namevalue() as string = split(line, "=")
    if namevalue(0) = "line name value that i want to edit" then
        currentpos = seek(1)
        fileclose()
        dim fs as filestream("test.ini", filemode.open)
        dim sw as streamwriter(fs)
        fs.seek(currentpos, seekorigin.begin)
        sw.write(null)
        sw.write(namevalue + "=" + newvalue)
        sw.close()
        fs.close()
        exit while
    end if
    msgbox("org ternate jua bisa, no line found")
end while

вот и все .. используй # d

0 голосов
/ 07 августа 2009

Вы работаете в операционной системе Unix?

Вы можете сделать это с помощью редактора потоков sed. Прочитайте справочную страницу "sed"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...