Auslesen von Text / Csv Datei und ersten beiden Zeilen immer überspringen

  • VB.NET

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

    Auslesen von Text / Csv Datei und ersten beiden Zeilen immer überspringen

    Hallo zusammen,

    ich versuche über meinen Vorhandenen Code das Einlesen von CSV Dateien.
    Dies Funktioniert schon aber ich möchte die ersten beiden Zeilen immer übersprungen haben.

    So sieht meine Komplette Sub aus.
    Überflüssigen Code habe ich entfernt da es sonst zu viel wird.

    VB.NET-Quellcode

    1. Public Sub ReadandWriteCSV()
    2. Dim finfo As New IO.DirectoryInfo(Loadpath)
    3. For Each fi In finfo.GetFiles(strTyp)
    4. Using sr As New TextFieldParser(fi.FullName)
    5. With sr
    6. .SetDelimiters(Delimiters)
    7. .HasFieldsEnclosedInQuotes = False
    8. Dim FieldData() As String
    9. Do While Not .EndOfData()
    10. FieldData = .ReadFields()
    11. Dim Position() As Integer = {1, BuchungsdatumPosition, BuchungsartPosition, BuchungsidentPosition, EinkaufPosition, BelegnummerPosition, BelegdatumPosition, BuchungsbetragPosition, SteuerschlüsselPosition, WährungPosition, BuchungstextPosition, KostenartPosition, KSTKTRPosition, ZahlungskonditionPosition}
    12. Dim csvFile() As String = fi.Name.Split(CChar(leseendung))
    13. Dim sw As System.IO.StreamWriter
    14. sw = FileSystem.OpenTextFileWriter(Savepath & csvFile(0) & schreibendung, True)
    15. Try
    16. Dim MyString As String = String.Empty
    17. Dim Xarray() As String = {Posi1, Buchungsdatum, Buchungsart, Buchungsident, Belegnummer, Belegdatum, EK, Buchungsbetrag, Steuerschlüssel, WährungPosition, Buchungstext, Kostenart, KSTKTR, ZahlungskonditionPosition}
    18. For i As Integer = 0 To Xarray.GetUpperBound(0)
    19. MyString = MyString.PadRight(Position(i) - 1) & Xarray(i)
    20. Next
    21. sw.WriteLine(MyString)
    22. Catch ex As Exception
    23. End Try
    24. sw.Close()
    25. Loop
    26. End With
    27. End Using
    28. Next
    29. End Sub


    Die ganzen Variablen sind deklariert und kommen Teils über eine Config xml Datei.
    Die zeilen länge sind immer unterschiedlich pro csv Datei.

    Danke und Gruss
    Thomas

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tweber“ ()

    Naja, wenn so, dann ich so:

    VB.NET-Quellcode

    1. For Each Row In IO.File.ReadAllLines("pfad").Skip(2)
    2. Dim RowItems = Row.Split(";"c) 'delimiter anpassen
    3. Next
    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.
    Beachte, dass nur der TextFieldparser csv korrekt lesen kann, entsprechend der Spezifikation dieses csv-Daten-Formats.
    Selbstgebastelte Parser ala

    VB.NET-Quellcode

    1. Dim cols() As String = rows(i).Split(";"c) 'delimiter anpassen
    produzieren bei bestimmten Datenlagen falsche Ergebnisse.
    Problematische Datenlagen sind solche, wo innerhalb eines Datenfeldes Freitext zulässig ist.
    Freitext kann nämlich den Spalten-Trenner (delimiter) enthalten.
    Selbstgebasteltes liest in solchen Fällen das Feld in zwei Spalten ein, und dann kommt allerlei durcheinander.

    Aber wenn dein Csv keinen Freitext enthält, wird alles gut gehen.
    Nur so eine Idee,

    du kannst das mit den Streamreadern alles "zu Fuß" erledigen, musst dann aber auch jede Eventualität berücksichtigen.
    Mit ADODB hast du eine Bibliothek, die mit CSV-Dateien schon seit Jahren umgehen kann.
    Wenn du zusätzlich noch mit Schemadateien arbeitest, dann hast du ein mächtiges Werkzeug an der Hand.
    (Schemadateien kann dir u.a. Word oder Excel beim Datenimport erstellen.)

    Mit ein bisschen Google oder Microsoft Hilfe findest du genügend Beispiele für einen Connectionstring und dessen Parameter.

    VB.NET-Quellcode

    1. dim con As ADODB.Connection
    2. dim rs As ADODB.Recordset
    3. dim csvFile as String
    4. dim sql as String
    5. ' csvFile = FileDialog....
    6. con = New ADODB.Connection
    7. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
    8. csvFile & _
    9. ";Extended Properties=""text;HDR=Yes;FMT=Delimited(chr(9))"";Persist Security Info=False"
    10. ' chr(9) = Tab ? prüfen!
    11. con.Open
    12. sql = "SELECT * FROM " & "Daten.csv" ' oder aus csvFile extrahieren
    13. rs.Open(sql)
    14. ' mach was
    15. rs.close


    Liebe Grüße und viel Erfolg!