Разделить текст на "\ 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
Я думаю, что я должен получить этот результат, но почему-то я чего-то не хватает...
Ответы
Ответ 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
, когда файлы прочитаны. (Когда файл читается \
становится \\
).