webentwicklung-frage-antwort-db.com.de

Text mit '\ r\n' teilen

Ich verfolgte diesen Artikel

Und ich habe mir diesen Code ausgedacht:

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);
    }
}

Hier ist der Beispieltext: 

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

Hier ist die Ausgabe:

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

Aber was ich will ist folgendes:

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

Ich denke, ich sollte dieses Ergebnis bekommen, aber irgendwie fehlt mir etwas ...

32
skmasq

Das Problem liegt nicht bei der Aufteilung, sondern eher bei der WriteLine. Ein \n in einer mit WriteLine gedruckten Zeichenfolge erzeugt eine "zusätzliche" Zeile.

Beispiel

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.
}

Um das Problem zu beheben, entfernen Sie \n, bevor Sie die Zeichenfolge drucken.

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

Das hat bei mir funktioniert.

using System.IO;

//  

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

Ich denke, das Problem liegt in Ihrer Textdatei. Es ist wahrscheinlich bereits in zu viele Zeilen aufgeteilt und wenn Sie es lesen, "fügt" es zusätzliche \r- und/oder \n-Zeichen hinzu (wie sie in der Datei vorhanden sind). Überprüfen Sie, was in der Variable text gelesen wird.

Der folgende Code (für eine lokale Variable mit Ihrem Text) funktioniert gut und teilt sich in zwei Zeilen auf:

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
Szymon

Ich habe einen kompakteren Ansatz gewählt, um eine Eingabe aus einem Textbereich in eine Liste mit Zeichenfolgen aufzuteilen. Sie können dies verwenden, wenn es Ihrem Zweck entspricht.

das Problem ist, dass Sie nicht durch\r\n teilen können. Daher habe ich vorher\n entfernt und nur durch\r geteilt

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

Ich mag diesen Ansatz, weil Sie es in nur einer Zeile machen können. 

2
Adrian Hedley

Das Lesen der Datei ist mit der statischen Klasse File einfacher:

// 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', ' '));
}

Hinweis: Der Text kann auch vertikale Tabulatoren \v enthalten. Diese werden von Microsoft Word als manuelle Zeilenumbrüche verwendet.

Um mögliche Pausen einzufangen, können Sie regex als Ersatz verwenden

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

Das hat bei mir funktioniert.

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

Die erste Ersetzung ersetzt den \r\n aus den neuen Zeilen der Textdatei, und die zweite ersetzt den eigentlichen \r\n-Text, der beim Lesen der Dateien in \\r\\n konvertiert wird. (Wenn die Datei gelesen wird, wird \ zu \\).

1
davidsbro

Der folgende Code gibt die beabsichtigten Ergebnisse an.

string text="some interesting text\nsome text that should be in the same line\r\nsome 
text should be in another line"
var results = text.Split(new[] {"\n","\r\n"}, StringSplitOptions.None);
0
user3472484