Подтвердить что ты не робот

Разделить текст на "\ r\n"

Я следил за этой статьей

И я придумал этот код:

string FileName = "C:\\test.txt";

using (StreamReader sr = new StreamReader(FileName, Encoding.Default))
{
    string[] stringSeparators = new string[] { "\r\n" };
    string text = sr.ReadToEnd();
    string[] lines = text.Split(stringSeparators, StringSplitOptions.None);
    foreach (string s in lines)
    {
        Console.WriteLine(s);
    }
}

Вот пример текста:

somet interesting text\n
some text that should be in the same line\r\n
some text should be in another line

Вот результат:

somet interesting text\r\n
some text that should be in the same line\r\n
some text should be in another line\r\n

Но я хочу, чтобы это:

somet interesting textsome text that should be in the same line\r\n
some text should be in another line\r\n

Я думаю, что я должен получить этот результат, но почему-то я чего-то не хватает...

4b9b3361

Ответ 1

Проблема заключается не в расщеплении, а в WriteLine. A \n в строке, напечатанной с помощью WriteLine, создаст "лишнюю" строку.

Пример

var text = 
  "somet interesting text\n" +
  "some text that should be in the same line\r\n" +
  "some text should be in another line";

string[] stringSeparators = new string[] { "\r\n" };
string[] lines = text.Split(stringSeparators, StringSplitOptions.None);
Console.WriteLine("Nr. Of items in list: " + lines.Length); // 2 lines
foreach (string s in lines)
{
   Console.WriteLine(s); //But will print 3 lines in total.
}

Чтобы устранить проблему, удалите \n, прежде чем печатать строку.

Console.WriteLine(s.Replace("\n", ""));

Ответ 2

Я думаю, проблема в вашем текстовом файле. Вероятно, он уже разделен на слишком много строк, и когда вы его читаете, он "добавляет" дополнительные символы \r и/или \n (как они есть в файле). Проверьте, что прочитано в переменной text.

Код ниже (локальная переменная с текстом) отлично работает и разбивается на две строки:

string[] stringSeparators = new string[] { "\r\n" };
string text = "somet interesting text\nsome text that should be in the same line\r\nsome text should be in another line";
string[] lines = text.Split(stringSeparators, StringSplitOptions.None);

Ответ 3

Я принял более компактный подход для разделения ввода, полученного в текстовой области, на список строк. Вы можете использовать это, если оно соответствует вашей цели.

проблема заключается в том, что вы не можете разбить на \r\n, поэтому я удалил \n заранее и разделил только на \r

var serials = model.List.Replace("\n","").Split('\r').ToList<string>();

Мне нравится этот подход, потому что вы можете сделать это только в одной строке.

Ответ 4

Это сработало для меня.

using System.IO;

//  

    string readStr = File.ReadAllText(file.FullName);          
    string[] read = readStr.Split(new char[] {'\r','\n'},StringSplitOptions.RemoveEmptyEntries);

Ответ 5

Чтение файла проще с помощью статического класса File:

// First read all the text into a single string.
string text = File.ReadAllText(FileName);

// Then split the lines at "\r\n".   
string[] stringSeparators = new string[] { "\r\n" };
string[] lines = text.Split(stringSeparators, StringSplitOptions.None);

// Finally replace lonely '\r' and '\n' by  whitespaces in each line.
foreach (string s in lines) {
    Console.WriteLine(s.Replace('\r', ' ').Replace('\n', ' '));
}

Примечание. Текст также может содержать вертикальные табуляторы \v. Они используются Microsoft Word в качестве ручных строк.

Чтобы поймать любые возможные разрывы, вы можете использовать регулярное выражение для замены

Console.WriteLine(Regex.Replace(s, @"[\f\n\r\t\v]", " "));

Ответ 6

Это сработало для меня.

string stringSeparators = "\r\n";
string text = sr.ReadToEnd();
string lines = text.Replace(stringSeparators, "");
lines = lines.Replace("\\r\\n", "\r\n");
Console.WriteLine(lines);

Первая замена заменяет \r\n из текстовых файлов новыми строками, а вторая заменяет фактический текст \r\n, который был преобразован в \\r\\n, когда файлы прочитаны. (Когда файл читается \ становится \\).