Benutzer mit den meisten Antworten
letzten Zeilenumbruch einer Datei entfernen

Frage
-
Hallo Leute,
der letzte Zeilenumbruch einer Datei soll entfernt werden. Das Entfernen würde wohl am günstigsten so gehen:
string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
Wie teste ich am schnellsten und effektivsten, ob eine Datei wirklich am Ende angelangt ist, oder besser, wie muss die Kondition codiert werden, damit der letzte Zeilenumbruch entfernt wird, und nicht ein beliebiger?Ich möchte nur ungerne mit einer zählerindizierten Schleife operieren, deren Indizie dann auf replacementString.Length geprüft wird...
- Bearbeitet tklustig Montag, 14. Januar 2019 14:49
Antworten
-
Hi,
if( <DeinString>.EndsWith( "\r\n" ) { <DeinString> = <DeinString>.SubString( 0, <DeinString>.Length - 2 ) }
Oder mit einem TrimEnd.
if( <DeinString>.EndsWith( "\r\n" ) { char[] trimChars = { '\r', '\n' }; <DeinString> = <DeinString>.TrimEnd( trimChars ); }
Letzteres würde aber so wie es da steht, bei mehreren Zeilenumbrüchen am Ende des Strings dazu führen, dass die alle entfernt werden.
\n anstelle von \r\n lässt sich da in die Prüfung per OrElse || mit einbauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Florian Haupt Montag, 14. Januar 2019 15:18
- Als Antwort markiert tklustig Montag, 14. Januar 2019 15:24
Alle Antworten
-
Hi,
if( <DeinString>.EndsWith( "\r\n" ) { <DeinString> = <DeinString>.SubString( 0, <DeinString>.Length - 2 ) }
Oder mit einem TrimEnd.
if( <DeinString>.EndsWith( "\r\n" ) { char[] trimChars = { '\r', '\n' }; <DeinString> = <DeinString>.TrimEnd( trimChars ); }
Letzteres würde aber so wie es da steht, bei mehreren Zeilenumbrüchen am Ende des Strings dazu führen, dass die alle entfernt werden.
\n anstelle von \r\n lässt sich da in die Prüfung per OrElse || mit einbauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Florian Haupt Montag, 14. Januar 2019 15:18
- Als Antwort markiert tklustig Montag, 14. Januar 2019 15:24
-
Danke für Dein rasches Feedback. Anstatt eines Regex würde also folgendes funktionieren(ein lokaler Test ist derzeit nur schwer möglich)
if(file2SendBack.EndsWith("\r\n")) file2SendBack = file2SendBack.Substring(0, file2SendBack.Length - 2);
Korrekt? Kann ich das kompilieren, ohne getestet zu haben und mich darauf verlassen, dass es klappt?
-
Ach komm.
Ein lokaler Test ist nur schwer möglich? Das ist ein Dreizeiler! Neue Konsolenanwendung, drei Zeilen rein, fertig.
Und Nein, ich geb dir natürlich keine Garantie auf irgendwas. Teste das.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
All right. Getestet mit einer neuen Konsolenanwendung. Passt alles. Vielen Dank nochmals für Deine rasche Hilfe. Dieser Thread kann als erfolgreich gelöst geschlossen werden.
using System; namespace TestString { class Program { static void Main(string[] args) { string file2SendBack = "TestString"+Environment.NewLine+"erneuter Teststring" + Environment.NewLine; if(file2SendBack.EndsWith("\r\n")) file2SendBack = file2SendBack.Substring(0, file2SendBack.Length - 2); Console.WriteLine(file2SendBack); Console.ReadKey(); } } }
- Bearbeitet tklustig Montag, 14. Januar 2019 15:24
-
Das Verfahren wäre:
- Das Ende der Datei auf den Zeilenumbruch prüfen
Für kleine Dateien eignet sich das komplette einlesen in einen String und dann am Ende schauen, bei größeren kommst Du nicht am Stream vorbei.
- Den Zeilenumbruch entfernen
Da dieser am Ende steht, gibt es zwei Möglichkeiten, den String (bzw. Stream) neu in eine Datei schreiben, oder beim Filestream mit SetLength die Länge neu festlegen (Dateilänge - Zeilenumbruch).
- Gruß Florian