Laden...

[gelöst] \r\r\n-Aufbau einer Datei?

Erstellt von mosspower vor 15 Jahren Letzter Beitrag vor 15 Jahren 973 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren
[gelöst] \r\r\n-Aufbau einer Datei?

Hallo "Kollegen",

ich würde gerne die Datei im Anhang Zeilenweise lesen - geht auch, nur ist immer zwischen den Zeilen \r\r\n .. wie bekomme ich das raus? Mit Replace funzzt das nicht? Was das denn für eine komische Datei? Muss irgendswas mit SAP zu tun haben.

 
        StreamReader reader = new StreamReader(@"\\Baws56067\D$\TESTENVIRONMENT_LOEWE\DeliveryNotifier\Import\wtf.txt");
        String readLine = String.Empty;

        while((readLine = reader.ReadLine()) != null) {
          Console.WriteLine(readLine);
        }
       
        reader.Close();

Was kann ich machen, dass die "Leerzeile" (bewusst in Anführungszeichen) nach der 1. Zeile nicht in der Console angezeigt wird? Wie kann ich das abfangen?

Danke schon mal für etwaige Antworten im Voraus

Gelöschter Account
vor 15 Jahren
if(readLine != "\r\r\n")
{
Console.WriteLine(readLine);
}
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren

Das ist ja gerade das Problem, das geht eben nicht ... komisch ist auch, dass reader.ReadToEnd() folgendes anzeigt ...

"0083680834;0000066334;Schmid-JSA-Altdorf@xxx.de\r\r\n0083680835;0000015862;"

also "nur" mit einem Backslash ... bei einer "normalen" Datei sind da immer zwei (maskiert) drinnen.

Wenn ich z.B. schreibe

String line = reader.ReadToEnd(), dann spinnt meine Umgebung, die kennt einfach den String line nicht.

Irgendwie ist der Aufbau der Datei total komisch.

888 Beiträge seit 2007
vor 15 Jahren

Bei mir gehts auch so:


if((!readLine.Equals(string.Empty)))
   Console.WriteLine(readLine);

Um genau zu sein so:


                string[] lines = File.ReadAllLines(@"C:\WTF.txt");
                for (int i = 0; i < lines.Length; i++)
                {
                    if(!lines[i].Equals(string.Empty))
                        Console.WriteLine(lines[i]); 
                }

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo mosspower,

eventuell hilft es auch, wenn Du vor dem Einlesen ein Ersetzen vornimmst, das "\r\r" zu "\r" ersetzt?

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren

@Joetempes,

so hatte ich es ja, Problem ist nur, dass ich auch leere Zeilen validieren wollte, und das geht ja dann nicht, wenn ich eine Datei mit so einem Aufbau bekomme.

Ich habe es jetzt gelöst mit ... String replace = reader.ReadToEnd().Replace(@"\r\r", @"\r");

.. ging aber vorher wirklich nicht, sonst hätte ich den Thread hier nicht eröffnet .. manchmal spinnt VS ..

danke für eure Hilfe!

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren

Ich glaub ich spinne .. jetzt hat mein Rechner gesponnen, ich habe neu gestartet und jetzt geht das nicht mehr .. kann mir bitte einer sagen, ob es lokal klappt, dass jemand das \r\r rausbekommt aus der aktuell angehängten Datei?

Ich bekomme das jedenfalls nicht hin .. ich kann zwar ...

String replace = reader.ReadToEnd().Replace((char)13, 'X');

machen, aber das nützt mir nichts, da ich dann XX\n nicht mehr finde ... ich habe keinen Plan mehr hier.

weder das eine noch das andere funzzt

replace = replace.Replace("XX" + Environment.NewLine, Environment.NewLine);
replace = replace.Replace(@"XX\n", Environment.NewLine);

Ich dreh' echt am Rad

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo mosspower,

naja, wenn das mit Replace etc. einfach nicht funktioniert, und /r/r/n zu Verzwickungen führt, dann baue Dir doch ein eigenes ReadLine(), bei mir Entwicklungszeit 5 Minuten:


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            using (StreamReader myFile = new StreamReader(@"C:\Dokumente und Einstellungen\[BenutzerAusgeblendet]\Desktop\Wtf.txt"))
            {
                while (myFile.Peek() >= 0)
                {
                    Console.WriteLine(ReadSpecialStreamLine(myFile));
                }
            }

            Console.WriteLine("Press Key!");
            Console.ReadKey();
        }

        private static String ReadSpecialStreamLine(StreamReader p_Stream)
        {
            char tmpByte;

            StringBuilder sb = new StringBuilder();
            while (p_Stream.Peek() >= 0)
            {
                tmpByte = (char)p_Stream.Read();
                if (tmpByte == '\r' && p_Stream.Peek() == '\r')
                {
                    p_Stream.Read();
                }

                sb.Append(tmpByte);
            }

            return sb.ToString();
        }

    }
}

Damit wird Deine Datei wie gewünscht angezeigt.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren

@norman_timo,

vielen Dank, ich habe jetzt tatsächlich das so angepasst ...

 
        while(reader.Peek() >= 0) {
          char currentChar = (char)reader.Read();

          if(currentChar == '\r' && reader.Peek() == '\r') {
            // Only if previous char is not new line
            if(previousChar != '\n') {
              reader.Read();
            }
          }

          previousChar = currentChar;
          sb.Append(currentChar);
        }

Es funzzt jetzt, ich musste das noch anpassen, da Leerzeilen \r hatten

Gruß und Danke