Einlesen von Txt-Dateien mit unterschiedlichen Trennern mit Excel VBA
Hallo Wissende,
ich habe eine Textdatei mit unterschiedlichen Trennern vorliegen die ich über ein Excelmakro einlesen und schlußendlich als SQL Daten in SQL2012 von Excel importieren möchte.
Die Datei sieht vom Inhalt so aus:
[Params]
Version=106
Monitor=38
SMode=111000100
Date=20140221
StartTime=17:29:19.0
Length=01:09:15.0
Interval=5
Upper1=166
Lower1=147
Upper2=0
Lower2=0
Upper3=180
Lower3=130
Timer1=00:00:00.0
Timer2=00:00:00.0
Timer3=00:00:00.0
ActiveLimit=0
MaxHR=210
RestHR=60
StartDelay=0
VO2max=33
Weight=87
[Note]
Mustertext 123456
[IntTimes]
00:06:46.2 141 92 136 146
0 0 0 94 87 175
0 0 0 0 0
0 99 7 0 220 0 0
89 1 62067654 139917504 20 0
00:14:59.9 152 142 150 159
0 0 0 71 82 175
0 0 0 0 0
0 1002 0 180 0 0
75 1 61657510 168720896 22 0
00:23:30.6 157 151 157 161
0 0 0 66 80 174
0 0 0 0 0
0 1003 0 170 0 0
74 1 71395382 184196608 20 0
00:32:32.4 153 146 153 160
0 0 0 65 79 173
0 0 0 0 0
0 1003 0 180 0 0
72 1 70329846 175524304 45 0
00:36:59.5 155 92 150 161
0 0 0 74 87 175
0 0 0 0 0
0 4541 0 190 0 0
77 0 62657526 166917537 56 0
[IntNotes]
1
2
3
4
5
[ExtraData]
1 2 3
2 2 6
3 2 7
4 2 4
5 1
[LapNames]
1 2
2 2
3 2
4 2
5 1
[Summary-123]
4135 0 0 1780 1140 1215
210 166 147 60
4135 0 0 1780 1140 1215
210 0 0 60
0 0 0 0 0 0
21 0 0 0 60
0 831
[Summary-TH]
4135 0 0 2305 615 1215
210 180 130 60
0 831
[HRZones]
210
189
168
147
126
105
[SwapTimes]
4135 0 0 2305 615 1215
210 180 130 60
0 831
[Trip]
52
4160
169
177
1540
[HRData]
92 0 0 175
92 0 0 175
93 65 85 175
97 85 86 175
101 91 86 175
104 92 87 175
108 93 87 175
110 94 86 175
113 95 86 175
116 95 86 175
Nun möchte ich gerne pro Abschnittsnamen die in jeder Zeile unterschiedlich häufigen Datensätze einzeln in Zeilen dargestellt bekommen und scheitere an den unterschiedlichen Trennsymbolen. Aussehen soll es später so:
Params Version 106
Params Monitor 38
Params SMode 111000100
Params Date 20140221
Params StartTime 17:29:19.0
Params Length 01:09:15.0
Params Interval 5
Params Upper1 166
Params Lower1 147
Params Upper2 0
Params Lower2 0
Params Upper3 180
Params Lower3 130
Params Timer1 00:00:00.0
Params Timer2 00:00:00.0
Params Timer3 00:00:00.0
Params ActiveLimit 0
Params MaxHR 210
Params RestHR 60
Params StartDelay 0
Params VO2max 33
Params Weight 97
Note Mustertext 123456
IntTimes 00:06:46.2
IntTimes 141
IntTimes 92
IntTimes 136
IntTimes 146
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 94
IntTimes 87
IntTimes 175
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 997
IntTimes 0
IntTimes 220
IntTimes 0
IntTimes 0
IntTimes 89
IntTimes 1
IntTimes 62067654
IntTimes 139917504
IntTimes 20
IntTimes 0
IntTimes 00:14:59.9
IntTimes 152
IntTimes 142
IntTimes 150
IntTimes 159
usw....
Diese Daten möchte ich dann in eine SQL Datenbank importieren.
Leider gelingt mir weder das Einlesen noch der Import.
Kann mir jemand weiterhelfen?
Mit vielen Dank im Voraus.
Michael
ich habe eine Textdatei mit unterschiedlichen Trennern vorliegen die ich über ein Excelmakro einlesen und schlußendlich als SQL Daten in SQL2012 von Excel importieren möchte.
Die Datei sieht vom Inhalt so aus:
[Params]
Version=106
Monitor=38
SMode=111000100
Date=20140221
StartTime=17:29:19.0
Length=01:09:15.0
Interval=5
Upper1=166
Lower1=147
Upper2=0
Lower2=0
Upper3=180
Lower3=130
Timer1=00:00:00.0
Timer2=00:00:00.0
Timer3=00:00:00.0
ActiveLimit=0
MaxHR=210
RestHR=60
StartDelay=0
VO2max=33
Weight=87
[Note]
Mustertext 123456
[IntTimes]
00:06:46.2 141 92 136 146
0 0 0 94 87 175
0 0 0 0 0
0 99 7 0 220 0 0
89 1 62067654 139917504 20 0
00:14:59.9 152 142 150 159
0 0 0 71 82 175
0 0 0 0 0
0 1002 0 180 0 0
75 1 61657510 168720896 22 0
00:23:30.6 157 151 157 161
0 0 0 66 80 174
0 0 0 0 0
0 1003 0 170 0 0
74 1 71395382 184196608 20 0
00:32:32.4 153 146 153 160
0 0 0 65 79 173
0 0 0 0 0
0 1003 0 180 0 0
72 1 70329846 175524304 45 0
00:36:59.5 155 92 150 161
0 0 0 74 87 175
0 0 0 0 0
0 4541 0 190 0 0
77 0 62657526 166917537 56 0
[IntNotes]
1
2
3
4
5
[ExtraData]
1 2 3
2 2 6
3 2 7
4 2 4
5 1
[LapNames]
1 2
2 2
3 2
4 2
5 1
[Summary-123]
4135 0 0 1780 1140 1215
210 166 147 60
4135 0 0 1780 1140 1215
210 0 0 60
0 0 0 0 0 0
21 0 0 0 60
0 831
[Summary-TH]
4135 0 0 2305 615 1215
210 180 130 60
0 831
[HRZones]
210
189
168
147
126
105
[SwapTimes]
4135 0 0 2305 615 1215
210 180 130 60
0 831
[Trip]
52
4160
169
177
1540
[HRData]
92 0 0 175
92 0 0 175
93 65 85 175
97 85 86 175
101 91 86 175
104 92 87 175
108 93 87 175
110 94 86 175
113 95 86 175
116 95 86 175
Nun möchte ich gerne pro Abschnittsnamen die in jeder Zeile unterschiedlich häufigen Datensätze einzeln in Zeilen dargestellt bekommen und scheitere an den unterschiedlichen Trennsymbolen. Aussehen soll es später so:
Params Version 106
Params Monitor 38
Params SMode 111000100
Params Date 20140221
Params StartTime 17:29:19.0
Params Length 01:09:15.0
Params Interval 5
Params Upper1 166
Params Lower1 147
Params Upper2 0
Params Lower2 0
Params Upper3 180
Params Lower3 130
Params Timer1 00:00:00.0
Params Timer2 00:00:00.0
Params Timer3 00:00:00.0
Params ActiveLimit 0
Params MaxHR 210
Params RestHR 60
Params StartDelay 0
Params VO2max 33
Params Weight 97
Note Mustertext 123456
IntTimes 00:06:46.2
IntTimes 141
IntTimes 92
IntTimes 136
IntTimes 146
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 94
IntTimes 87
IntTimes 175
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 0
IntTimes 997
IntTimes 0
IntTimes 220
IntTimes 0
IntTimes 0
IntTimes 89
IntTimes 1
IntTimes 62067654
IntTimes 139917504
IntTimes 20
IntTimes 0
IntTimes 00:14:59.9
IntTimes 152
IntTimes 142
IntTimes 150
IntTimes 159
usw....
Diese Daten möchte ich dann in eine SQL Datenbank importieren.
Leider gelingt mir weder das Einlesen noch der Import.
Kann mir jemand weiterhelfen?
Mit vielen Dank im Voraus.
Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 258294
Url: https://administrator.de/forum/einlesen-von-txt-dateien-mit-unterschiedlichen-trennern-mit-excel-vba-258294.html
Ausgedruckt am: 23.04.2025 um 09:04 Uhr
12 Kommentare
Neuester Kommentar
Hallo Michael,
für deinen Import kannst du das hier nehmen:
(Codezeilen sind kommentiert)
Grüße Uwe
für deinen Import kannst du das hier nehmen:
(Codezeilen sind kommentiert)
Sub ImportTextFile()
'Pfad der Textdatei
Const TEXTFILE = "C:\temp\test.txt"
'Variablen
Dim fso, arrContent, strLine, strSection, strDelim, arrCols, secCount
Dim rngOut As Range
'Objekte
Set fso = CreateObject("Scripting.FileSystemObject")
'Textdatei in Array einlesen
arrContent = Split(fso.OpenTextFile(TEXTFILE, 1).ReadAll(), vbNewLine)
'Startausgabezelle setzen
Set rngOut = Sheets(1).Range("A1")
Range("A:ZZ").NumberFormat = "@"
'Für jede Zeile der Textdatei ...
For Each strLine In arrContent
strLine = Trim(strLine) 'entferne eventuelle Leerzeichen
'entferne eventuelle Tabs am Ende der Zeile
If Right(strLine, 1) = Chr(9) Then strLine = Left(strLine, Len(strLine) - 1)
'Wenn die Zeile nicht leer ist
If strLine <> "" Then
'Wenn mit der Zeile eine Sektion startet speichere den aktuellen Sektionsnamen
If Left(strLine, 1) = "[" Then
If secCount = 0 Then
rngOut.Value = strSection
Set rngOut = rngOut.Offset(1, 0)
End If
strSection = Mid(strLine, 2, Len(strLine) - 2)
secCount = 0
Else 'keine Sektion -> Datenzeile
secCount = secCount + 1
'Prüfe und setze Spaltentrenner
If InStr(1, strLine, "=", vbTextCompare) Then
strDelim = "="
Else
strDelim = Chr(9)
End If
'Spalten der Zeile in Array schreiben
arrCols = Split(strLine, strDelim, -1, vbTextCompare)
If strDelim = Chr(9) Then
For i = 0 To UBound(arrCols)
rngOut.Value = strSection
rngOut.Offset(0, 1).Value = arrCols(i)
Set rngOut = rngOut.Offset(1, 0)
Next
Else
rngOut.Value = strSection
rngOut.Offset(0, 1).Value = arrCols(0)
rngOut.Offset(0, 2).Value = arrCols(1)
Set rngOut = rngOut.Offset(1, 0)
End If
End If
End If
Next
End Sub
Zitat von @mhsk97:
Da keine Leerzeichen sondern Tabs als Trenner vorhanden sind habe ich deinen Code bereits dahingehend angepasst.
Das war dann deiner Formatierung ohne Code-Tags geschuldet Da keine Leerzeichen sondern Tabs als Trenner vorhanden sind habe ich deinen Code bereits dahingehend angepasst.
Nun stellt mir der Code jedoch leider nicht die Tab-getrennten Daten zeilenweise sondern immer noch in Spalten aufgeteilt dar. Wie
bekomme ich es hin das diese Daten einzeln untereinander stehen?
OK das hatte ich dann fehlinterpretiert, ist oben dahingehend abgeädnert.bekomme ich es hin das diese Daten einzeln untereinander stehen?
... und wie bekomme ich diese Daten dann in eine SOL Datenbank?
Ohne Info wie das in welche Tabellen mit welchem Format muss, ein Raten mit der Christbaumkugel ....Grüße Uwe
Zitat von @mhsk97:
Es gibt Abschnitte die nicht in jeder Datei gefüllt sind, sondern nur der Abschnittsname steht, wäre super wenn dieser
in der Auflistung ohne Daten erscheint.
ist oben angepasstEs gibt Abschnitte die nicht in jeder Datei gefüllt sind, sondern nur der Abschnittsname steht, wäre super wenn dieser
in der Auflistung ohne Daten erscheint.
Als zweites gibt es Abschnitte die nur 1x oder 2x Daten beinhalten. Bsp.:
[IntNotes]
1
2
3
4
5
Diese werden nun leider immer mit einem zusätzlichen Leerfeld nach dem Makrodurchlauf aufgeführt:
Bekommt man diese Leerzeilen irgendwie weg?
kann ich hier nicht nachvollziehen, läuft mit meinem Code hier wie gewünscht ..., da du deine Daten aber immer ohne Codetags postest, denke ich, es liegt an deinen Textdateien.[IntNotes]
1
2
3
4
5
Diese werden nun leider immer mit einem zusätzlichen Leerfeld nach dem Makrodurchlauf aufgeführt:
Bekommt man diese Leerzeilen irgendwie weg?
Zum Eintrag in eine SQL Datenbank würde mir ein Musterbeispiel zum Öffnen der DB, Anlegen der Spalten und Schreiben der
Daten vlt. schon weiterhelfen....
hier siehts nämlich als Ergebnis im Excel-Sheet so aus:Daten vlt. schon weiterhelfen....
IntTimes 0
IntNotes 1
IntNotes 2
IntNotes 3
IntNotes 4
IntNotes 5
ExtraData 1
ExtraData 2
ExtraData 3
ExtraData 2
ExtraData 2
- http://webcheatsheet.com/asp/database_connection_to_MSSQL.php
- https://www.google.de/search?q=vbs+sql+server+adodb.connection&ie=ut ...
Viel Erfolg
Grüße Uwe
Ist doch nicht schwer:
<code> Quellcode </code>
.Kann ich Dir eine Musterdatei einmal zusenden. Dann könntest Du mir vlt. besser helfen.... Wie sende ich Dir eine Datei?
ich schick dir ne PM...Darf ich bei Problemen diesbezüglich noch einmal auf Dich zurück kommen?
mach das Nochmals besten Dank.
Keine Ursache.Als denn schöne Feiertage
Grüße Uwe
p.s. Ich frage mich warum du den Umweg über Excel gehen willst ? Musst du die Daten noch nachbearbeiten ?
Zur Info: Das ganze geht auch direkt mit VBS ohne erst den Zwischenschritt in Excel zu vollziehen.
Nicht vergessen den Beitrag bitte noch auf gelöst zu setzen, das Ursprungsproblem wurde ja gelöst. Merci.
Frohes Fest
Grüße Uwe
Frohes Fest
Grüße Uwe