Filereader Problem

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Filereader Problem

    Ich habe folgendes Problem :
    für einen Kunden soll ich eine CSV-Datei auslesen und den Dateninhalt in eine Datenbank schreiben. Dabei tritt das Problem auf, das der eingelesene String ab Zeile 3 oder 4 nicht mehr am Stück eingelesen wird, sondern nur ein Teil davon. Der Rest landet dann in einer neuen Zeile. Meines Wissens sind Textlängen von strings ja nicht wirklich limitiert, die einzige andere Möglichkeit wäre, das sich in einem sehr langen Text CR+LF versteckt.

    fileReader = My.Computer.FileSystem.OpenTextFileReader(CSVName, System.Text.Encoding.Default)
    Do While Not fileReader.EndOfStream
    Stringreader = fileReader.ReadLine()
    .....
    Code zum Verarbeiten
    .....
    Loop
    fileReader.Close()

    Im Moment habe ich keine Idee, wie dies Problem zu lösen wäre.
    Dateien
    • back_LB_655 .txt

      (2,88 MB, 76 mal heruntergeladen, zuletzt: )
    Im Text sind tatsächlich vbLf-Positionen drin, die wohl einen Text umbrechen sollen, aber leider durch ReadLine oder seine nicht My-Namespace-Pendants wie IO.File.ReadAllLines auch als Umbruch erkannt werden. Sind diese verhinderbar? Ansonsten wäre eine Möglichkeit, den kompletten Text als einen String herzunehmen und an vbCrLf-Positionen zu zerschneiden. Dazu könnte man den String mit Dim ShredderedTextLines = YourFileText.Split(Microsoft.VisualBasic.vbCr(0))* vorbearbeiten und dann führende vbLfs löschen.

    *vbCrLf, vbCr, vbLf sind Strings und können so nicht mit Option Strict On in die Split-Extension eingesetzt werden; daher vbCr(0), was das erste Zeichen des einzeichigen Strings vbCr wiedergibt.

    ##########

    @Roy1305: Ich hab den Post noch etwas nachbearbeitet
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Wie mein Vorredner schreibt sind da vbLf drin, als "richtige" Zeilenumbrüche sind da noch vbCrLf.
    Man könnte die Textdatei komplett einlesen und die vbLf raus löschen.

    VB.NET-Quellcode

    1. Dim FileText As String
    2. Using sr As New IO.StreamReader("back_LB_655 .txt", System.Text.Encoding.Default)
    3. FileText = sr.ReadToEnd.Replace(vbLf, "").Replace(vbCr, vbCrLf)
    4. End Using

    Es stellt sich die Frage, ob die in-Text-Zeilenumbrüche erhalten werden sollen.
    Falls nicht, ginge Post#4 von HenryV. Falls doch, dann wäre Post#2 von mir möglich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ich denke, du solltest mal den TextFieldParser anwenden - der weiß CSV richtig zu nehmen.
    CSV ist nämlich ein etwas leistungsfähigeres Dateiformat als man gemeinhin denkt, und ein csv-Datum darf auch LineFeeds enthalten.
    Aber wie gesagt: Bei sowas scheitern selbstgebastelte Parser gerne, daher nimm den Microsoft.VisualBasic.TextFieldParser.

    gugge Csv importieren
    Oder vielleicht einfach die Excel in eine DataTable einlesen ind dann weiter verarbeiten? Da sind dann Zeilenumbrüche egal...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen