Laden...

csv: Zeilenumbruch innerhalb einer Zelle

Erstellt von IchRoque81 vor 15 Jahren Letzter Beitrag vor 15 Jahren 6.928 Views
IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 15 Jahren
csv: Zeilenumbruch innerhalb einer Zelle

Hallo zusammen!

Ich habe da ein kleines Problem und finde einfach keine Lösung dazu. Vielleicht könnnt ihr mir ja weiterhelfen 😃

Folgende Situation:
Ich lege einen StreamWriter an um in eine csv-Datei Eintragungen vorzunehmen. Mit ";" kann ich in die nächste Spalte springen und um in die nächste Zeile zu gelangen kann ich Environment.NewLine oder mit writer.WriteLine arbeiten. Nun möchte ich aber gerne einen Zeilenumbruch innerhalb einer Zelle erzeugen.
Hier mal ein bisschen Code, damit ihr euch das vielleicht besser vorstellen könnt.


            using (StreamWriter writer = new StreamWriter(Path.Combine(Application.StartupPath, "test.csv")))
            {
                writer.WriteLine(string.Format("Zeile 1{0}nächste Zeile;nächste Zelle", '\r'));
            }


Egal ob ich \r oder \n übergeben, ich lande immer in der Zelle darunter. Als Ergebnis wäre es so wie in dem angehängten Bild gewünscht.

In Excel selbst ist der Zeilenumbruch innerhalb einer Zelle mit Alt+Enter möglich. Kann mir einer verraten, wie ich das mit C# erreichen kann?

Gruß,
IchRoque81

~ rock on ~

1.696 Beiträge seit 2006
vor 15 Jahren

Unter Windows ist ein Zeilenumbruch immer CRLF, also \r\n sollte helfen.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 15 Jahren

\r\n ist ja das gleich wie Environment.NewLine, nur das Environment.NewLine Betriebssystemunabhängig ist.

Damit komm ich immer in die Zeile darunter. Also KEIN Zeilenumbruch INNERHALB der der Zelle 😉

~ rock on ~

U
105 Beiträge seit 2004
vor 15 Jahren

Muss der Wert der Zelle eventuell in Hochkommas?

1.696 Beiträge seit 2006
vor 15 Jahren

Hm ... ich würde sagen, du erstellst eine xls-Datei mit solcher Zelle und lese sie in C# ein. Im Debuger müsste man sehen können, was das für ein Trennzeichen ist.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 15 Jahren

@UnrealNemesiS:
Hast du dafür ein Beispiel? Bei mir bringt das irgendwie nix 😦


            using (StreamWriter writer = new StreamWriter(Path.Combine(Application.StartupPath, "test.csv")))
            {
                writer.WriteLine(string.Format("'Zeile 1{0}nächste Zeile';nächste Zelle", "\r\n"));
            }

@vbprogger:
Beim debuggen erhalt ich als string folgendes zurück:


q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>\0\0\t\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\a\0\0\0\b\0\0\0\t\0\0\0

Damit kann ich leider nix anfangen. Im Original steht folgendes drin (Eingabe):
Zeile Alt+Enter umbruch

~ rock on ~

U
105 Beiträge seit 2004
vor 15 Jahren

Also wenn dann müssen es bestimmt doppelte sein. Excel generiert mir folgende CSV-Datei:

1.696 Beiträge seit 2006
vor 15 Jahren

mach mal so:

"Zeile 1
Zeile 2";"Zeile 1
Zeile 2";"Zeile 1
Zeile 2"
test;test;test

Wenn du mit Excel öffnest, müsstest du:

Zeile 1 | Zeile 1 | Zeil 1
Zeile 2 | Zeile 2 | Zeil 2
---------------------------
test    | test    | test

erhalten.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 15 Jahren

Sorry, aber ich sitz gerade irgendwie auf dem Schlauch. Könntet ihr mir ein passendes WriteLine-Beispiel geben?

~ rock on ~

1.696 Beiträge seit 2006
vor 15 Jahren
using (StreamWriter sr = new StreamWriter(@"c:\test.csv"))
{
   sr.WriteLine("\"Zeile 1\nZeile2\";\"Zeile 1\nZeile2\";\"Zeile 1\nZeile2\"");
   sr.WriteLine("test;test;test");
}

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

U
105 Beiträge seit 2004
vor 15 Jahren

StreamWriter sw = new StreamWriter(@"D:\1.csv");
sw.WriteLine("1");
sw.WriteLine("2");
sw.WriteLine("3");
sw.WriteLine("\"4\n5\"");
sw.WriteLine("6");

sw.Flush();
sw.Close();

Edit: Wieso macht der Editor automatisch Semikolons rein???

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 15 Jahren

DANKE vbprogger!!! Jetzt hab ich verstanden, wie du es gemeint hast 😉

So. Jetzt geh ich ne Runde schlafen, damit ich von dem dicken Schlauch hier runter komm. Hoffentlich ist der morgen nicht wieder da 😄

Merci noch mal !!!

~ rock on ~