PDA

Vollständige Version anzeigen : Textdatei einlesen, splitten und in Tabelle schreiben


Smashi
12.10.2011, 15:45
Hallo,

ich muss eine Textdatei in Access einlesen. Hierzu habe ich mir folgenden Code gebastelt der auch funktioniert :):
Public Sub ImportDatei(strDatei As String)

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strZeile As String

Set db = CurrentDb
Set rs = db.OpenRecordset("tblImportLog")

Open strDatei For Input As #1

With rs
Do While Not EOF(1)
Line Input #1, strZeile
.AddNew
.Fields("Parameter") = strZeile
.Update
Loop
End With

Close #1

Set rs = Nothing
Set db = Nothing

End Sub
Wenn der Import erfolgt ist, starte ich eine weitere Anfügeabfrage, die mir aus jeder Zeile 2 Textteile Splittet und in eine weitere Tabelle schreibt. Kann ich dieses Splitten der Daten auch gleich beim Einlesen der Textdatei durchführen und dann in die endgültige Datei schreiben?

Gruß

Atrus2711
12.10.2011, 15:57
Hi,

so, wie du die aktuelle Zeile in eine Tabelle schreibst, kannst du auch einen Teil der Zeile in eine andere Tabelle schreiben.... du brauchst dann einen zweiten Recordset und den dorthin zu schreibenden Zeilenteil.

Übrigens: der Code liest 1:1 in eine Tabelle ein. Das kann ein gewöhnlicher Import schneller.

Thomas Möller
12.10.2011, 18:09
Hallo!

Wenn der Import erfolgt ist, starte ich eine weitere Anfügeabfrage, die mir aus jeder Zeile 2 Textteile Splittet und in eine weitere Tabelle schreibt. Kann ich dieses Splitten der Daten auch gleich beim Einlesen der Textdatei durchführen und dann in die endgültige Datei schreiben?

Ich möchte Martins Hinweis etwas ergänzen:
Du könntest die Datei nach Access verknüpfen und dann mit einer oder mehreren Anfügeabfragen die Daten in die gewünschten Tabellen schreiben.

Beim Verknüpfen kannst Du eine Importspezifikation angeben. Dort kannst Du festlegen welche Daten in welche Felder mit welchem Datentyp kommen.

HTH

Smashi
12.10.2011, 19:24
Hallo,

habe mich jetzt nochmal ein bisschen reingelesen und habe was ausprobiert:

Der folgende Code funktioniert, aber ist er auch korrekt oder kann man was besser machen. Ein Import einer Datei mit 60000 Zeichen wird auch innerhalb von 3 Sekunden eingelesen:

Public Sub ImportDatei()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strZeile As String
Dim strBeleg As String

Set db = CurrentDb
Set rs = db.OpenRecordset("tblImport")

Open "C:\Integration.log" For Input As #1

With rs
Do While Not EOF(1)
Line Input #1, strZeile
If InStr(strZeile, "BelegID") > 0 Then
If InStr(strZeile, "VerarbeitungsKz: 1") > 0 Then
strBeleg = Split(strZeile, " ")(35)

.AddNew
.Fields("Beleg") = strBeleg
.Update
End If
Loop
End With

Close #1

Set rs = Nothing
Set db = Nothing

End Sub

Danke und Gruß

Atrus2711
13.10.2011, 10:26
Hi,

da ist ein If ohne End If drin.

Außerdem ist das doch auch nur ein Wegschreiben in eine Zieltabelle. Wolltest du nicht in zwei Zieltabellen reinschreiben?