Wykrywanie kilku CRLF w tekście

0

Próbuję podmienić dwa "entery" na jeden w stringu. Niestety wygląda na to że instrukcja "Replace" nie jest w stanie wykryć dwóch takich znaków obok siebie. Mój kod:

 

string tekst =  TextEdit.Text;
tekst = tekst.Replace("\r\n\r\n", "\r\n");
TextEdit.Text = tekst;

Alternatywnie:


string tekst =  TextEdit.Text;
tekst = tekst.Replace(System.Environment.NewLine + System.Environment.NewLine, System.Environment.NewLine);
TextEdit.Text = tekst;

P.S. Można zapisać "System.Environment.NewLine" jako podwójny znak w skróconej formie zamiast: System.Environment.NewLine + System.Environment.NewLine ?

1
EroSanin napisał(a):

P.S. Można zapisać "System.Environment.NewLine" jako podwójny znak w skróconej formie zamiast: System.Environment.NewLine + System.Environment.NewLine ?

String.Format("{0}{0}",System.Environment.NewLine);
1

Pierwszy sposób działa:

            string text = "abcdfgh\r\n\r\nijklmno";
            Console.WriteLine("Przed podmianą:\n{0}", text);
            text = text.Replace("\r\n\r\n", "\r\n");
            Console.WriteLine("Po podmianie:\n{0}",text);

Output:

Przed podmianą:
abcdfgh

ijklmno
Po podmianie:
abcdfgh
ijklmno

Sprawdź sobie pod debuggerem jak rzeczywiście wygląda twój string.

0

Faktycznie kod działa jeśli pod zmienną string sztywno przypisać tekst z CRLF. Jeśli jednak zczytuje tekst z okienka po wprowadzeniu przez użytkownika, dwa entery są dla programu niewidoczne. Poniższy kod niestety pokazuje mi tekst z niewidocznymi symbolami odpowiadającymi za entery. Można to jakoś inaczej podejrzeć w debugerze?

string tekst = "test\r\n\r\ntest"
Debug.WriteLine("test1: " + tekst);

 
1

Prawdopodobnie enter z okienka zwraca tylko "\n" a nie "\r\n"

0

To było właśnie to. Nie wykryłem tego w testach, gdyż wynik też zwracałem do okna. Po wczytaniu podmieniłem wszystkie znaki \n na \r\n, zaś przed wypisaniem \r\n na \n. Teraz wyniki się zgadzają. Dzięki !

0
EroSanin napisał(a):

To było właśnie to. Nie wykryłem tego w testach, gdyż wynik też zwracałem do okna. Po wczytaniu podmieniłem wszystkie znaki \n na \r\n, zaś przed wypisaniem \r\n na \n. Teraz wyniki się zgadzają. Dzięki !

To nie prościej usunąć wszystkie \r?

1

Można to jakoś inaczej podejrzeć w debugerze?

Ustawiasz breakpointa i podglądasz zmienną, tam powinna być widoczna z takimi znakami jak \n

0

Bo zamiast używać RichTextBox wystarczyło użyć TextBox z Multiline bo nie widzę żebyś korzystasz z RTF i formatowania tekstu, oraz używając TextBox cała zabawa z podmianą znaków nie była by potrzebna bo tam jest po ludzku \r\n. Do tego czemu tylko dwie nowe linie a jak dam 3 razy enter to i tak będzie nie ładnie sformatowane. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1