Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

17.11.2012, 12:50

C# Zeilenumbrüche gehen aus Richbox beim speichern verloren

Hallo Community,

irgendwie macht der Compiler von Visual Studio 2010 bei der Ausführung meines Quelltextes einen Fehler, wenn ich meinen String-Text in einer RichBox anzeigen lasse, ist der Text richtig formatiert. Wenn ich ihn allerdings mit diesem Code speichern will

C#-Quelltext

1
 StreamWriter WStream = new StreamWriter(textBox2.Text);            WStream.Write(richTextBox2.Text);            WStream.Close();


sind alle Zeilenumbrüche verschwunden. Woran könnte das liegen?
Ich mache im String-Text überall wo ein Zeilenumbruch hinsoll immer ein "\r" hin.

Wo könnte der Fehler liegen?
Danke schon mal für die Hilfe.

Gruß,
MitgliedXYZ

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

17.11.2012, 13:18

Soweit ich das im Kopf habe ist ein Newline unter Windows "\n" und unter Linux "\r\n". Da gab es aber auch ein paar Probleme mit den Definitionen. Hab das nicht mehr so richtig im Kopf. "\n" sollte aber eigentlich funktionieren. Und die RicTextBox muss Multiline auf "true" gestellt haben.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

17.11.2012, 13:39

Andersrum. Linux ist \n, Windows ist \r\n.
Ein \r allein dürfte vermutlich in der Tat nicht funktionieren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

18.11.2012, 11:43

Danke BlueCobold, "\r\n" funktioniert...
Komischerweise wenn mein Programm einen Zeilenumbruch einlesen soll, reicht "\r", .Split funktioniert ja sowieso nur mit Char-Werten, "\r\n" wäre schon wieder String...
Wenn ich jetzt eine so Zerteilte Textdatei wieder zusammensetze, sind die Zeilenumbrüche in der RichTextBox erhalten. Wenn ich die Datei allerdings im Notepad öffne, sind alle Zeilenumbrüche trotz "\r\n" weg. Woran könnte das liegen?

Ist es ein Problem, wenn ich beim öffnen der Datei sie bei jedem "\r" in ein einzelne Array-Elemente aufspalte, aber dann wieder mit "\r\n" zusammensetze? Ist das Problem vielleicht, das viele unsichtbare "\n"s übrigbleiben, die der RichTextBox nichts ausmachen, aber Notepad?
Wie könnte man es besser machen?

Danke schon mal.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

18.11.2012, 23:51

ich bin mir nicht sicher, ob ich den Anfang des 2. Absatz richtig verstanden habe:
du hast also aus "hallo\rWelt\r!" ein "hallo\r\nWelt\r\n!" gemacht? dürfte eigentlich kein Problem sein

was anderes: hast du auch schon andere Textbearbeitungsprogramme probiert? (bspw. Notepad++)
meines Wissens hat notepad Probleme mit "falsch" kodierten Zeilenumbrüchen, wobei ich mir da nicht ganz sicher bin
wenn du ganz genau wissen willst, was in der Textdatei gespeichert wurde, dann solltest du diese mit einem Hexeditor o. ä. öffnen

neben "\n" (Unix) und "\r\n" (Windows) gibt es auch noch "\r" (unter Mac OSX und vermutlich auch iOS) und einen Unicode-Zeilenumbruch (hatte ich bisher nicht mit gearbeitet)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

19.11.2012, 06:39

Mac OS X und iOS nutzen \n. Mac OS nutzte \r.

Das Problem mit dem Split habe ich nicht verstanden. Auch nicht, warum Du immer ein \r in's File schreibst. Erstens gibt es replace("\r", "\r\n") und zweitens kannst du auch gleich "\r\n" in das File schreiben.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

7

19.11.2012, 16:41

Mhh ich glaub jetzt habe ich dich nicht richtig verstanden...
Also mein Programm läd eine Textdatei und diese teile ich dann bei jedem Zeilenumbruch in ein Array auf, also so

C#-Quelltext

1
            string[] sElemente = sUrsprungsdatei.Split(Convert.ToChar("\r"));


Aber wenn ich nach den einzelnen Rechnungen mit den Arrayelementen das Array wieder in eine Textdatei zusammensetzen will, mache ich das so:

C#-Quelltext

1
2
 foreach (string sElement in sElemente)            {   sNeueDatei = sNeueDatei + "\r\n" + sElement;
}


Wenn ich jetzt eine, z.b. mit Notepad erzeugte Textdatei in mein Programm lade und wieder speichere, sind alle Zeilenumbrüche noch da. Komischerweiße nach dem 2. Mal durchlaufen lassen sind die Zeilenumbrüche weg. Deswegen ist meine Vermutung, dass die "\n"s die ja im Gegensatz zu den "\r"s beim öffnen ignoriert werden, aber beim speichern immer noch dazukommen.
Könnte also die Ansammlung an "\n"s das Problem sein?

Und wie es mit Mac & Co. aussieht ist mir unwichtig, ich brauche es nur lauffähig unter Windows 7...

Gruß,
MitgliedXYZ

Edit:
Split(Convert.ToChar("\r\n")) würde übrigens nicht funktionieren, Char darf nur ein Zeichen sein...

Und wenn ich beim Speichern nur "\r"s mache, sind eben keine Zeilenumbrüche dar :S

Edit2:

Zitat

du hast also aus "hallo\rWelt\r!" ein "hallo\r\nWelt\r\n!" gemacht?
Ich glaube es läuf so ab:
Anfangstextdatei: "halo\rWelt"
Textdatei nach 1. Durchlaufen: "halo\r\nWelt"
Textdatei nach 2. Durchlaufen: "halo\r\n\nWelt"
Textdatei nach 3. Durchlaufen: "halo\r\n\n\nWelt"
Aber ich bin mir nicht sicher, Notepad zeigt mir die "\r" und "\n"´s ja nicht...

Danke aber schon mal für die Hilfe.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »MitgliedXYZ« (19.11.2012, 16:53)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

19.11.2012, 16:53

WTF.
Einen Text, welcher "\r\n" enthält nur an "\r" zu splitten ist schon relativ unsinnig, denn die "\n" bleiben ja erhalten. Wenn, dann musst Du natürlich erstmal \r\n in \r replacen und daran splitten. ToChar("\r\n") geht ebenfalls nicht, aber dafür habe ich ja schon gerade eben *und* in meinem letzten Beitrag "replace" erwähnt.

Übrigens, schon mal von "File.WriteAllLines" und "File.ReadAllLines" gehört?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

9

19.11.2012, 16:55

WTF.
Einen Text, welcher "\r\n" enthält nur an "\r" zu splitten ist schon relativ unsinnig, denn die "\n" bleiben ja erhalten.
Das ist genau mein Problem :huh:

Übrigens, schon mal von "File.WriteAllLines" und File.ReadAllLines gehört?
Nein, noch nicht...
File.ReadAllLines klingt hilfreich, ich schau mal...

Werbeanzeige