Textdatei mit TAB Trennzeichen in DGV importieren

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Kevin12345.

    Textdatei mit TAB Trennzeichen in DGV importieren

    Hallo Leute,

    hab zwei kleine Probleme :(, hoffe ihr könnt mir einwenig helfen

    mein Arbeitsauftrag : eine csv. Datei wird in ein Ordner geschoben und meine Anwendung soll beim Start diese Datensätze in eine SQL Datenbank importieren. Die Anwendung soll erkennen ob eine neue Datei im Ordner liegt und falls ja soll diese Importiert werden.

    erstes Probleme : wie würdet Ihr die Aufgabenstellung am besten lösen, dass die Anwendung die neueste Datei erkennt und diese importiert. Tipps wären super :)

    zweites Problem : Die .csv Datei hat als Trennzeichen "TAB" . Hab das ganze schoneinmal gelöst mit dem Trennzeichen ";". Hat prima funktioniert. Nur wie mache ich das mit "TAB".

    VB.NET-Quellcode

    1. Dim DATEINAME As String
    2. Dim ANZAHLSPALTEN As Integer = 41
    3. Dim TRENNZEICHEN As Char = ";"
    4. Dim dbaktuell As New dbconnection
    5. Public Sub import_csv()
    6. DATEINAME = "P:\SUP\test\tgf.csv"
    7. Dim Felder() As String
    8. Dim zeile As String
    9. Dim dt As New DataTable()
    10. Dim sr = My.Computer.FileSystem.OpenTextFileReader(DATEINAME, System.Text.Encoding.Default)
    11. Do While (sr.Peek > -1) ' Dateiende abfragen
    12. zeile = sr.ReadLine ' Eine Datenzeile lesen
    13. Felder = zeile.Split(TRENNZEICHEN) ' Splitten in Felder
    14. Dim dr As DataRow = dt.NewRow ' Leere Datenzeile erstellen
    15. dr.ItemArray = Felder ' In DataRow speichern
    16. dt.Rows.Add(dr) ' Felder zur Datatable hinzufügen
    17. Loop
    18. frmMain.DataGridView1.DataSource = dt



    Danke Schonmal , freu mich auf eure Kommentare! :)
    Hallo Kevin,

    ad 1) Ich mache das immer so, dass die Datei zur / nach Bearbeitung in einen eigenen Ordner verschoben wird
    Dann komme ich gar nicht in die Verlegenheit, eine Änderung der Datei erkennen zu müssen.

    ad 2) Eine Änderung in Zeile 5 sollte doch reichen, oder habe ich deine Frage nicht richtig verstanden?

    Mandy
    Wenn du mich schon mit einem Hinweis auf Google IxQuick abspeisen willst...
    So schreib mir doch wenigstens die Suchbegriffe dazu :thumbup:
    hab das erste Problem gelöst mit einem FileSystemWatcher, funktioniert super :)

    das zweite Problem besteht leider noch, soll die Tabelle jetzt über Excel in ein DGV importieren.

    Der Compiler hat beim Befüllen des Datasets( "oAdapter.Fill(oDs)" ) folgendes Probleme
    Fehlermeldung

    "Das Microsoft Jet-Datenbankmodul konnte das Objekt 'sTable' nicht finden. Stellen Sie sicher, dass das Objekt existiert und dass die Namens- und Pfadangaben richtig eingegeben wurden."

    Der Pfad, sowie der Dateiname stimmen 1000%ig ^^

    VB.NET-Quellcode

    1. Dim oDs As System.Data.DataSet
    2. Dim oConn As System.Data.OleDb.OleDbConnection
    3. Dim oAdapter As System.Data.OleDb.OleDbDataAdapter
    4. Dim sFile As String = "C:\Users\ke\Documents\Visual Studio 2010\Projects\Prozesscontrolling\tgf.xls"
    5. Dim stable As String = "tabelle1$"
    6. Dim sConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sfile & ";" & "Extended Properties=Excel 8.0;"
    7. oConn = New System.Data.OleDb.OleDbConnection(sConn)
    8. oAdapter = New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [sTable]", oConn)
    9. oDs = New System.Data.DataSet
    10. Try
    11. oAdapter.Fill(oDs)
    12. With frmMain.DataGridView1
    13. .DataSource = oDs.Tables(0)
    14. .ReadOnly = True
    15. .Refresh()
    16. End With
    17. Catch ex As Exception
    18. MsgBox("Fehler beim Anzeigen der Excel-Daten!")
    19. Finally
    20. oConn.Close()
    21. End Try





    Entweder du codierst deine Tabelle1$ hart in den SQL-Befehl rein oder du erzeugst den Befehl dynamisch.
    mit [] kannst du jedenfalls keine Variablen von VB nach SQL substituieren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Super funktioniert perfekt! Nur spuckt er mir jetzt wieder eine andere Fehlermeldung aus.

    "Installierbares ISAM nicht gefunden" hab gegoogled aber hat nichts geholfe. Liegt scheinbar an meinem Connectionsstring an der Excel Version.

    Hab oft gelesen das man Excel 12.0 xml eintragen soll, was jedoch bei mir nicht funktioniert.
    sitze seit gestern mittag wieder an einem neuen Problem für das ich leider keine Lösung habe.

    hab in meine Anwendung ein FileSystemWatcher eingebaut der auch prima funktioniert.

    VB.NET-Quellcode

    1. Public Sub ueberwachung_folder(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. m_fsw = New IO.FileSystemWatcher("C:\Users\user\Documents\Visual Studio 2010")
    3. m_fsw.EnableRaisingEvents = True
    4. End Sub
    5. Private Sub m_fsw_Changed(sender As Object, e As System.IO.FileSystemEventArgs) Handles m_fsw.Changed
    6. If e.Name = "Potenzial_ab_Adresspools1.xlsx" Then
    7. import_xls("C:\Users\user\Documents\Visual Studio 2010\Potenzial_ab_Adresspools1", "Potenzial_ab_Adresspools$")
    8. MessageBox.Show("yippi")
    9. ElseIf e.Name = "WV_Stati_Adresspools1.xlsx" Then
    10. import_xls("C:\Users\user\Documents\Visual Studio 2010\WV_Stati_Adresspools1", " WV_Stati_Adresspools$")
    11. MessageBox.Show("yippi2")
    12. End If
    13. End Sub


    Die Prozedur springt dann je nach Fall in meine import_xls Prozedur. Die läuft durch bis zu Anweisung "With frm.datagridview1 "

    Dort springt der Debugger dann in die Mainformklasse(was ich absolut nicht kapiere wieso?!) und das Datagridview wird nicht befüllt mit den Datensätzen.

    Wenn ich den FileSystemWatcher auskommentiere funktioniert alles prima.