.dat Datei einlesen und zerlegen



  • Hallo Zusammen,

    ich versuche gerade eine .dat Datei einzulesen. Mit StreamReader habe ich
    es zuerst versucht was aber nicht funst!

    StreamReader sr = new StreamReader("FileName.DAT", Encoding.GetEncoding("ASCII"));
    

    Wenn man die Datei mit Notepad++ öffnet kann man mit der ANSI-Codierung die Adressdaten lesen. Nur die Umlaute werden nicht richtig angezeigt. Zwischen den Daten finden sich große Abstände welche mit "NULL" bzw. Leerzeichen aufgefüllt werden. Vor jedem Wert findet sich eine Bezeichnung. Im Falle der BLZ ist diese SO.

    Jetzt habe ich mit der "File.ReadAllBytes-Klasse" experimentiert und komme da auch nicht weiter. Ich bräuchte zu dem Thema etwas Starthilfe!

    byte[] ansiBytes = File.ReadAllBytes("KUNDEN2.DAT");
    var datInhalt = Encoding.Default.GetString(ansiBytes);
    richTextBox2.Text = datInhalt;
    

    Wenn ich es so laufen lasse bekomme ich nur drei "yyyy" welche auch zu Beginn in der Datei stehen. 😕

    Muss dazu sagen das ich noch recht neu auf dem Gebiet bin und man mir
    vielleicht zu dilettantische Fragen vergeben möge!!

    VG Micha



  • Das deutet auf ein Unicode-Encoding (UTF-8, UTF-16 o.ä.) hin - Notepad++ sollte dir aber das genaue Encoding anzeigen (unten rechts in der Taskleiste z.B. "ANSI as UTF-8").
    Und dann entsprechend dieses Encoding im Code angeben.

    Kannst dir ja auch mal den zug. Wiki-Artikel Zeichenkodierung mal durchlesen (bes. "Computer und Datenaustausch" und "Differenzierung der Begriffe durch Einführung des Unicodes").



  • Hallo Th69,

    vielen Dank für deine Antwort und Hilfe!
    Wenn ich die Datei öffne steht im Notepad++
    ANSI als Encoding-Format.

    VG Micha



  • Habe nun rausgefunden das mit einer "OEM 850" Codierung
    die Umlaute in der Datei richtig dargestellt werden.
    Zumindest klappt dies in Notepad++ so!

    Wenn ich es aber mit der entsprechenden Codierung

    byte[] bytes = Encoding.Default.GetBytes(line);
    array1[counter] = Encoding.GetEncoding(850).GetString(bytes);
    

    einlesen möchte, klappt es nicht. 😞



  • Dein Code ergibt ja auch keinen Sinn - erst einen String in Bytes per Default und dann nach OEM 850 wandeln (Default entspricht der in Windows eingestellten Code-Page).

    Probiere mal:

    byte[] ansiBytes = File.ReadAllBytes("KUNDEN2.DAT");
    string datInhalt = Encoding.GetEncoding(850).GetString(ansiBytes);
    richTextBox2.Text = datInhalt;
    

    PS: Bitte benutze die C#-Tags (anstatt Code 😉



  • Hallo Th69,

    ich denke das es mit der Konvertierung klappt.
    Wie komme ich denn jetzt an die anderen Werte
    im Array ran?

    byte[] ansiBytes = File.ReadAllBytes("KUNDEN2.DAT");
    string datInhalt = Encoding.GetEncoding(850).GetString(ansiBytes[2]);
    richTextBox2.Text = datInhalt;
    

    So klappt es nicht! :p Dann erhalte ich folgende Meldung.

    Fehler 1: Die beste Übereinstimmung für die überladene System.Text.Encoding.GetString(byte[])-Methode hat
    einige ungültige Argumente.

    Dann habe ich es noch so probiert.

    string datInhalt = Encoding.GetEncoding(850).GetString(ansiBytes, 0, 2222);
    

    Aber mit der Angabe der zu codierenden Bytes läuft es zwar ohne Fehler
    aber man bekommt keinen Wert aus dem Array.

    VG Micha



  • Ist die .dat-Datei überhaupt eine Textdatei oder aber sind das Binärdaten?
    Poste ansonsten mal die ersten Werte aus der Datei (zur Not aus einem Hexeditor rauskopiert).



  • So schaut die Datei im Hexeditor aus.

    http://www.directupload.net/file/d/4556/2snr59nf_png.htm



  • Also eine reine Binärdatei (sieht man ja an den vielen Nullen), d.h. das macht so keinen Sinn diese direkt als Text in einer TextBox anzuzeigen (außer du kennst die genauen Positionen der dadrin vorhandenen lesbaren Texte).

    Kennst du denn das genaue Format der .dat-Datei (d.h. ist das eine von einem bekannten Programm erstellte oder aber ein selbstgebasteltes)?

    Als weitere Hilfe kann ich dir bzgl. Parsen der Binärdatei den BinaryReader empfehlen.



  • Nee Positionen der Daten kenne ich leider nicht. Hatte gehofft das ich dies an Hand eines Bytes finden und unterscheiden kann. Die Datei stammt aus einem alten DOS Programm (16Bit Anwendung). Ist leider auch kein Programm "von der Stange"!


Anmelden zum Antworten