Laden...

Textbox ignoriert \r\n - Strings kommen von Datenbank

Erstellt von Maffi1986 vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.921 Views
Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 8 Jahren
Textbox ignoriert \r\n - Strings kommen von Datenbank

Hallo,

irgendwie stehe ich aufm Schlauch, ich habe einen Text in einer MSSQL Datenbank, diesen lese ich in einen String ein und weise dann einer Textbox den Text zu, die Textbox zeigt den Text auch an, allerdings macht keinen Zeilenumbruch sondern zeigt \r\n an und ich versteht nicht warum. Ich hoffe das zählt nicht unter Grundlagen fragen 😕

Vielen Dank im vorraus.

Maffi

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo Maffi1986,

hast du schon geschaut wie der String im Debugger aussieht? In VS kannst du als Debugger-Visualizer "Text" wählen -- siehe angehängtes Bild.
Es könnte sein, dass vom SQL Server ein String in nicht erwarteter Kodierung kommt.

Multiline ist bei der Textbox auch angestellt?

Das folgende wird nichts bringen, aber eine Versuch wäre es wert:
Wenns dort richtig ist, nur in der TextBox nicht, so ersetze \r\n durch Environment.NewLine. Ob das etwas bringt bezweifle ich aber, denn unter Windows entspricht Environment.NewLine gerade \r\n.

Ebenso probiers nur mit \n.

Unter welcher Infrastruktur läuft deine Anwendung, denn bei mir (Win7 64bit, DEU, .net 4.5) gehts mit \n \r\n immer.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 8 Jahren

Hallo gfoidll,

ich habe das mit Enviroment.NewLine probiert, funktion aber nicht weil es ja im String steht und durch + dazwischen gefügt wird.

So lese ich die Daten aus


string gewerbeText,privatText;
            cmd.CommandText = "Select Art,Text from fusstexte;";
            rdr = cmd.ExecuteReader();
            int i = 0;
            while (rdr.Read())
            {
                if (i==0)
                {
                    gewerbeText = Convert.ToString(rdr[1]);
                    i++;
                }
                if (i==1)
                {
                    privatText = rdr[1].ToString();
                }   
            }
            rdr.Close();
            MSSQL.Close();

Ich nutze VS Community 2015 unter Windows 10 und Windows 7. Ich verstehe auch nicht, warum er das nicht macht. Ich denke mir bleibt nix übrig als den String zu Splitten und ....."+Enviroment.NewLine+"..... einzufügen, allerdings scheint mir das nicht die beste Lösung zu sein. Eigentlich müsste das auch anders funktonieren. Multiline ist aktiviert, in der string Variable wird \r\n angezeigt. Vielleicht ist es einfach zu Spät um klar denken zu können 😁

Vielen Dank Maffi

T
50 Beiträge seit 2010
vor 8 Jahren

Hi,

also für mich schaut der Text eher nach "\r\n" aus. Sonst würde im Text nicht "\r\n" stehen und die Umbrüche würden einfach ignoriert werden, wenn es sich tatsächlich um ein Problem mit der Darstellung der Zeilenumbrüche handeln würde.

4.931 Beiträge seit 2008
vor 8 Jahren

Wenn das so in der TextBox angezeigt wird, dann steht es auch so im String drin, d.h. nicht die beiden Steuerzeichen CR + LF, sondern die 4 Zeichen '', 'r', '' und 'n'.
Ersetze also einfach @"\r" durch "\r" und @"\n" durch "\n":


s = s.Replace(@"\r", "\r");
s = s.Replace(@"\n", "\n");

Wenn du nicht weißt, was das @ bedeutet: [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen (alternativ statt @"" kannst du also auch "\" schreiben).

Edit: da aber anscheinend verschiedene Zeilenumbrüche im Text vorkommen, und die Windows-TextBox nur CRLF unterstützt, müßtest du also auch noch '\n' und "\n\r" durch Enviroment.NewLine ("\r\n") ersetzen.

PS: Da schien der Datenbank-Anwendungsentwickler aber ganz schlau gewesen zu sein, daß er dort die Steuerzeichen im Text beim Eintragen in die DB ersetzt hat (oder gibt irgendein Anwender oder externes Programm den Text so ein?) 😉

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 8 Jahren

Hallo,

irgendwie funktioniert das auch nicht. Im String stehen ja die Steuerzeichen drin.

Anbei mal ein Bild wie es in der Datenbank steht.

Viele Grüße

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo Maffi1986,

dort stehen sie "escaped", daher die doppelten Backslash. (Das hättest du nach meinem ersten Post schon feststellen können.

Wenn du nur \n hast, so sollte es gehen.
Also string.Replace("\\n", "\n").

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 8 Jahren

Hallo gfoidl,

vielen Dank für die antwort, ich habe das nur Testweise so eingetragen, sowohl \ als auch \ haben den gleichen effeckt, ich fass hier nochmal etwas detailierter zusammen

Text in der SQL Datenbank

Mit erhalt der Ware bestätige ich, dass vorgehaltene Material mein persöhnliches Eigentum war. \n Wir weisen Sie darauf hin, dass jede Tätigkeit zur Erzielung von Einnahmen zur Umsatzsteuer- \\n und Einkommenssteuerpflicht führen kann. Klären Sie dies mit Ihrem Finazamt oder Steuerberater

Im Text steht sowohl \ als auch \, beides funktioniert leider nicht
So lese ich den Text aus, und füge Ihn zur Textbox hinzu.


            cmd.CommandText = "Select Text from fusstexte WHERE Art=Privat;";
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                    gewerbeText = Convert.ToString(rdr[1]);
            }
            rdr.Close();
            MSSQL.Close();
            tb_Freitext.Text = gewerbeText;            

Im Anhang dann das ergbnis.

Viele Grüße und vielen Dank

Maffi

16.806 Beiträge seit 2008
vor 8 Jahren

IIRC musst Du hier Replace mit Environment.NewLine verwenden.
zB

 tb_Freitext.Text = gewerbeText.Replace("\n", Environment.NewLine);

Könnte in diesem Fall natürlich auch \n sein, das ersetzt werden muss.
Funktioniert jedenfalls bei mir.

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 8 Jahren

Vielen Dank Abt,

hat super funktioniert.

Viele Grüße

Maffi