Supportnet / Forum / Datenbanken
Textdatei in Access importieren
Frage
Hallo,
ich möcht einen Teil des Inhaltes aller Texdateien in einem bestimmten Ordner in eine Accesstabelle importieren. Die einzelnen Zeilen der Textdatei sollen aber nicht als jeweils neuer Datensatz eingefügt werden, sondern als Spalte. Die Tabelle habe ich vorher entsprechend angelegt.
Zu Beginn jeder Zeile der Textdatei steht in eckigen Klammern, was in der Zeile steht, danach folgt sofort ein Zeilenumbruch ohne jegliche Trennungszeichen. Beispiel:
[Straße]Lange Straße
[Hausnummer]2a
[PLZ]0123456
Die Textinhalte in jeder Datei sind gleich. Nur der Text dahinter ändert sich.
Die Spaltenbezeichnungen lauten genauso wie die Bezeichnungen in den Klammern.
Mir ist es egal, ob das Einfügen des Textes mit Hilfe von Makros oder Modulen passiert, hautsache möglichst automatisch.
Ich habe leider noch keine Erfahrung mit VBA oder ähnlichem und weiss deswegen nach wenigen Versuchen nicht weiter. Wäre für jede Hilfe dankbar.
Antwort 1 von Hinki27
Hi Chap,
wie wird das Ende eines Datensatzes erkannt, oder steht in einer Datei nur ein DS?
Der Rest sollte kein Problem sein. Nach der Info stelle ich dir ein kleines VBA-Programmzusammen.
Gruß
Ralf
wie wird das Ende eines Datensatzes erkannt, oder steht in einer Datei nur ein DS?
Der Rest sollte kein Problem sein. Nach der Info stelle ich dir ein kleines VBA-Programmzusammen.
Gruß
Ralf
Antwort 2 von Chap
Danke für die schnelle Antwort.
Jeder Datensatz hat eine eigene Datei.
Jeder Datensatz hat eine eigene Datei.
Antwort 3 von Hinki27
Hi Chap,
hier ein Beispielcode ohne Fehlerhandling und "Blümchen".
Der Code ist getestet, probiere es aus. Meine Datei, in die ich importiere heisst "textimport" und muss die entsprechenden Felder laut Textfile besitzen. Viel Spass beim ausprobieren.
Gruß
Ralf
================================================
Public Sub Textimport()
Const TextfileDir = "C: extfiles"
Const filePattern = "*.txt"
Dim fso As Scripting.FileSystemObject
Dim ts As Scripting.TextStream
Dim fd As Scripting.Folder
Dim fs As Scripting.File
Dim rec As ADODB.Recordset
Dim i1 As Integer
Dim i2 As Integer
Dim line As String
Dim field As String
Dim value As String
Set rec = New ADODB.Recordset
Set fso = New Scripting.FileSystemObject
rec.Open "Textimport", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Set fd = fso.GetFolder(TextfileDir)
For Each fs In fd.Files
Set ts = fs.OpenAsTextStream(ForReading)
rec.AddNew
While Not ts.AtEndOfStream
line = ts.ReadLine
i1 = InStr(line, "[")
i2 = InStr(i1, line, "]")
If i1 > 0 And i2 > i1 + 1 Then
field = Mid(line, i1 + 1, i2 - i1 - 1)
value = Mid(line, i2 + 1)
rec(field) = value
End If
Wend
rec.Update
Next
rec.Close
Set rec = Nothing
Set fso = Nothing
End Sub
hier ein Beispielcode ohne Fehlerhandling und "Blümchen".
Der Code ist getestet, probiere es aus. Meine Datei, in die ich importiere heisst "textimport" und muss die entsprechenden Felder laut Textfile besitzen. Viel Spass beim ausprobieren.
Gruß
Ralf
================================================
Public Sub Textimport()
Const TextfileDir = "C: extfiles"
Const filePattern = "*.txt"
Dim fso As Scripting.FileSystemObject
Dim ts As Scripting.TextStream
Dim fd As Scripting.Folder
Dim fs As Scripting.File
Dim rec As ADODB.Recordset
Dim i1 As Integer
Dim i2 As Integer
Dim line As String
Dim field As String
Dim value As String
Set rec = New ADODB.Recordset
Set fso = New Scripting.FileSystemObject
rec.Open "Textimport", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Set fd = fso.GetFolder(TextfileDir)
For Each fs In fd.Files
Set ts = fs.OpenAsTextStream(ForReading)
rec.AddNew
While Not ts.AtEndOfStream
line = ts.ReadLine
i1 = InStr(line, "[")
i2 = InStr(i1, line, "]")
If i1 > 0 And i2 > i1 + 1 Then
field = Mid(line, i1 + 1, i2 - i1 - 1)
value = Mid(line, i2 + 1)
rec(field) = value
End If
Wend
rec.Update
Next
rec.Close
Set rec = Nothing
Set fso = Nothing
End Sub
Antwort 4 von Chap
Danke, werde es gleich ausprobieren.
Antwort 5 von Chap
ich habs jetzt mit dem quelltext versucht. Dateiname usw. sind natürlich angepasst. Allerdings läuft das ganze nicht ganz durch. In der Zeile
"Dim fso As Scripting.FileSystemObject "
kommt eine Fehlermeldung
"Benutzerdefinierter Typ nicht definiert" habe schon einpaar Sachen ausprobiert, aber das richtige war nicht dabei.
Woran kann der Fehler liegen?
"Dim fso As Scripting.FileSystemObject "
kommt eine Fehlermeldung
"Benutzerdefinierter Typ nicht definiert" habe schon einpaar Sachen ausprobiert, aber das richtige war nicht dabei.
Woran kann der Fehler liegen?
Antwort 6 von Hinki27
Hallo Chap,
du muss in VBA über den Menüpunkt "Extras->Verweise" aus der Liste "Microsoft Scripting Runtime" aktivieren, denn dort ist die Klasse "Scripting" definiert, sorry hatte ich vergessen.
Gruß
Ralf
du muss in VBA über den Menüpunkt "Extras->Verweise" aus der Liste "Microsoft Scripting Runtime" aktivieren, denn dort ist die Klasse "Scripting" definiert, sorry hatte ich vergessen.
Gruß
Ralf

