Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Einlesen von Txt-Dateien mit unterschiedlichen Trennern mit Excel VBA

Frage Entwicklung VB for Applications

Mitglied: mhsk97

mhsk97 (Level 1) - Jetzt verbinden

22.12.2014, aktualisiert 24.12.2014, 1355 Aufrufe, 12 Kommentare

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
0
0
0
0
0

[SwapTimes]
4135 0 0 2305 615 1215
210 180 130 60
0 831


[Trip]
52
0
4160
169
177
0
1540
0

[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
Mitglied: colinardo
22.12.2014, aktualisiert um 13:17 Uhr
Hallo Michael,
für deinen Import kannst du das hier nehmen:
(Codezeilen sind kommentiert)
01.
Sub ImportTextFile() 
02.
    'Pfad der Textdatei 
03.
    Const TEXTFILE = "C:\temp\test.txt" 
04.
     
05.
    'Variablen 
06.
    Dim fso, arrContent, strLine, strSection, strDelim, arrCols, secCount 
07.
    Dim rngOut As Range 
08.
    'Objekte 
09.
    Set fso = CreateObject("Scripting.FileSystemObject") 
10.
    'Textdatei in Array einlesen 
11.
    arrContent = Split(fso.OpenTextFile(TEXTFILE, 1).ReadAll(), vbNewLine) 
12.
     
13.
    'Startausgabezelle setzen 
14.
    Set rngOut = Sheets(1).Range("A1") 
15.
    Range("A:ZZ").NumberFormat = "@" 
16.
     
17.
    'Für jede Zeile der Textdatei ... 
18.
    For Each strLine In arrContent 
19.
        strLine = Trim(strLine) 'entferne eventuelle Leerzeichen 
20.
        'entferne eventuelle Tabs am Ende der Zeile 
21.
        If Right(strLine, 1) = Chr(9) Then strLine = Left(strLine, Len(strLine) - 1) 
22.
        'Wenn die Zeile nicht leer ist 
23.
        If strLine <> "" Then 
24.
            'Wenn mit der Zeile eine Sektion startet speichere den aktuellen Sektionsnamen 
25.
            If Left(strLine, 1) = "[" Then 
26.
                If secCount = 0 Then 
27.
                    rngOut.Value = strSection 
28.
                    Set rngOut = rngOut.Offset(1, 0) 
29.
                End If 
30.
                strSection = Mid(strLine, 2, Len(strLine) - 2) 
31.
                secCount = 0 
32.
            Else    'keine Sektion -> Datenzeile 
33.
                secCount = secCount + 1 
34.
                'Prüfe und setze Spaltentrenner 
35.
                If InStr(1, strLine, "=", vbTextCompare) Then 
36.
                    strDelim = "=" 
37.
                Else 
38.
                    strDelim = Chr(9) 
39.
                End If 
40.
                'Spalten der Zeile in Array schreiben 
41.
                arrCols = Split(strLine, strDelim, -1, vbTextCompare) 
42.
                 
43.
                 
44.
                If strDelim = Chr(9) Then 
45.
                    For i = 0 To UBound(arrCols) 
46.
                        rngOut.Value = strSection 
47.
                        rngOut.Offset(0, 1).Value = arrCols(i) 
48.
                        Set rngOut = rngOut.Offset(1, 0) 
49.
                    Next 
50.
                Else 
51.
                    rngOut.Value = strSection 
52.
                    rngOut.Offset(0, 1).Value = arrCols(0) 
53.
                    rngOut.Offset(0, 2).Value = arrCols(1) 
54.
                    Set rngOut = rngOut.Offset(1, 0) 
55.
                End If 
56.
            End If 
57.
        End If 
58.
    Next 
59.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: mhsk97
22.12.2014 um 11:13 Uhr
Hallo Uwe,

herzlichen Dank für die superschnelle Antwort.

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?

So ist es nun gem. Makro:

IntTimes 00:06:46.2 141 92 136 146
IntTimes 0 0 0 94 87 175
IntTimes 0 0 0 0 0
IntTimes 0 997 0 220 0 0
IntTimes 89 1 62067654 139917504 20 0

So wäre es erforderlich:

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

... und wie bekomme ich diese Daten dann in eine SOL Datenbank?

Nochmals vielen Dank für die schnelle Antwort, ich habe mich sehr darüber gefreut.

Beste Grüße

Michael
Bitte warten ..
Mitglied: colinardo
22.12.2014, aktualisiert um 11:39 Uhr
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 (Bitte in Zukunft beachten.Merci.)
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.
... 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
Bitte warten ..
Mitglied: mhsk97
22.12.2014 um 12:18 Uhr
Hallo Uwe,

das ist ja unglaublich wie schnell das geht. Klappt wunderbar mit 2 Ausnahmen:

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.

Bsp.:

[ExtraData]


Als zweites gibt es Abschnitte die nur 1x oder 2x Daten beinhalten. Bsp.:

[IntNotes]
1
2
3
4
5

bzw.

[LapNames]
1 2
2 2
3 2
4 2
5 1

Diese werden nun leider immer mit einem zusätzlichen Leerfeld nach dem Makrodurchlauf aufgeführt:

IntNotes 1
IntNotes
IntNotes 2
IntNotes
IntNotes 3
IntNotes
IntNotes 4
IntNotes
IntNotes 5
IntNotes

bzw.:

LapNames 1
LapNames 2
LapNames
LapNames 2
LapNames 2
LapNames
LapNames 3
LapNames 2
LapNames
LapNames 4
LapNames 2
LapNames
LapNames 5
LapNames 1
LapNames

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.... wenn Du mir dann noch bei evtl. auftretenden Problemen noch zur Seite stehen würdest wäre ich dankbar. Ich möchte Dich und Deine Fähigkeiten natürlich nicht mit Christbaumkugelraten belasten )

Beste Grüße

Michael
Bitte warten ..
Mitglied: colinardo
22.12.2014, aktualisiert um 12:54 Uhr
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 angepasst
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.
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:
IntTimes	0 
IntNotes	1 
IntNotes	2 
IntNotes	3 
IntNotes	4 
IntNotes	5 
ExtraData	1 
ExtraData	2 
ExtraData	3 
ExtraData	2 
ExtraData	2
Dazu gibt es Beispiele "en masse":

Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: mhsk97
22.12.2014 um 13:02 Uhr
Hallo Uwe,

vielen Dank.

Das mit den Code-Tags habe ich nicht wirklich verstanden.

Kann ich Dir eine Musterdatei einmal zusenden. Dann könntest Du mir vlt. besser helfen.... Wie sende ich Dir eine Datei?

Beste Grüße

Michael
Bitte warten ..
Mitglied: colinardo
22.12.2014 um 13:05 Uhr
Zitat von mhsk97:
Das mit den Code-Tags habe ich nicht wirklich verstanden.
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...
Bitte warten ..
Mitglied: colinardo
22.12.2014, aktualisiert um 14:19 Uhr
In deinem File waren in den zwei Sections abschließende Tabs vorhanden die das Verhalten verursacht haben. Habe für diesen Fall oben dafür einen Fix eingebaut.

Grüße Uwe
Bitte warten ..
Mitglied: mhsk97
22.12.2014 um 20:41 Uhr
Hallo Uwe,

funktioniert tadellos, spitzenklasse. Nochmals herzlichen Dank. Beneide Dich um Deine VBA-Kenntnisse. Habe gefühlt ewig daran herumprobiert und es nicht so hinbekommen.

Versuche mich nun mit Deinen Tipps an der SQL-Übertragung.

Darf ich bei Problemen diesbezüglich noch einmal auf Dich zurück kommen?

Nochmals besten Dank.

Viele Grüße

Michael
Bitte warten ..
Mitglied: colinardo
22.12.2014, aktualisiert um 22:24 Uhr
Darf ich bei Problemen diesbezüglich noch einmal auf Dich zurück kommen?
mach das , ich hoffe aber das zumindest MS-SQL-Server Grundkenntnisse vorhanden sind ?! Wenn nicht, bitte dazu erst einlesen, merci.

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.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 24.12.2014, aktualisiert um 14:31 Uhr
Nicht vergessen den Beitrag bitte noch auf gelöst zu setzen, das Ursprungsproblem wurde ja gelöst. Merci.

Frohes Fest
Grüße Uwe
Bitte warten ..
Mitglied: mhsk97
24.12.2014 um 14:33 Uhr
Hallo Uwe,

erl. steht auf gelöst.

Dir auch ein frohes weihnachtsfest und einen guten und vor allem gesunden Rutsch ins neue Jahr.

Beste Grüße

Michael
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Microsoft Office
Excel VBA "SVERWEIS" über mehrere Dateien in Ordner (2)

Frage von Acht85 zum Thema Microsoft Office ...

Microsoft Office
gelöst Txt Dateien in Excel importieren (9)

Frage von Serbitar zum Thema Microsoft Office ...

VB for Applications
gelöst VBA - viele CSV Dateien in ein Excel sheet (2)

Frage von LordY6 zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...