добавить пустую строку в текстовый файл

1

Поэтому позвольте мне привести пример моего файла:

Hello
my
name
is

Теперь, например, я хочу просмотреть различные строки этого файла с помощью System.IO.File.ReadAllLines(); а затем проверить с помощью цикла, имеет ли текущая строка слово "мое" в нем (так что вторая строка в этом случае).

В качестве следующего шага я хочу добавить новую строку сразу после "моего", так что она выглядит так:

Hello
my

name
is

Я подошел к этому с помощью двух методов. Я надеялся на File.Append(); предложит метод, в котором я мог бы добавить что-либо после того, как нашел строку, которую я ищу, но, очевидно, она предлагает только методы добавления строк в конец файлов.

Мой второй подход состоял в том, чтобы читать во всех строках со строкой [] test = System.IO.File.ReadAllLines(); а затем перебирать все строки, проверяя каждую строку с помощью

for (int i = 0; i < (test.Length - 1); i++)
{
    if(test[i].Contains("my"))
    {
        test[i] = test[i] + Environment.NewLine;
    }
}

а затем записать все это обратно в файл с помощью System.IO.File.WriteAllLines();

Проблема, с которой я столкнулся, заключается в том, что эта команда действительно не добавляет реальной строки в файл, поскольку я проверил test.Length до и после, и оба раза я получил 4 в результате.

  • 0
    Настоящая стройная Коди.
  • 0
    И ты пишешь результат обратно? Можете ли вы показать нам больше кода?
Показать ещё 3 комментария
Теги:
string
text

3 ответа

1
Лучший ответ

Другой вариант - добавить строки в список, который даст вам метод Insert(): * Используйте это только для относительно небольших файлов.

Что-то вроде:

        string path = @"c:\some\path\file.txt";
        List<String> lines = new List<string>(System.IO.File.ReadAllLines(path));
        for (int i = 0; i < lines.Count; i++)
        {
            if (lines[i].Contains("my"))
            {
                if (i < lines.Count -1)
                {
                    lines.Insert(i + 1, "");
                }
                else
                {
                    lines.Add("");
                }
            }
        }
        System.IO.File.WriteAllLines(path, lines.ToArray());
  • 0
    Это был идеальный ответ. Спасибо
0

Во-первых, я предлагаю вам использовать StringBuilder. Лучше всего использовать его, когда вы добавляете много строк, поскольку строки неизменяемы, и поэтому каждая строка создается снова, когда вы делаете += или просто назначаете новый в слот массива.

Этот код будет делать то, что вы ищете, и он рассматривает новый случай края линии:

            var filePath = //your file path
            var test = File.ReadAllLines(filePath);
            var sb = new StringBuilder();
            for (int i = 0; i < (test.Length - 1); i++)
            {
                sb.Append(test[i]);
                sb.Append(Environment.NewLine);
                if (test[i].Contains("my"))
                {
                    // This adds that extra new line
                    sb.Append(Environment.NewLine);
                }
            }
            sb.Append(test[test.Length-1]);

            File.WriteAllText(filePath,  sb.ToString());
  • 0
    Это выглядит многообещающе! Попробую завтра, спасибо
0
[TestMethod]
    public void InsertLines()
    {
        var test = File.ReadAllLines(@"c:\SUService.log");
        var list = new List<string>();

        for (int i = 0; i < (test.Length - 1); i++)
        {
            list.Add(test[i]);
            if (test[i].Contains("my"))
            {
                list.Add(Environment.NewLine);
            }
        }
        File.WriteAllLines(@"c:\SUService.log", list);
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню