Auswertung eines txt-Dateiinhaltes mit Excel

Mitglied: OlliMuc

OlliMuc (Level 1) - Jetzt verbinden

22.03.2016, aktualisiert 11:19 Uhr, 1652 Aufrufe, 19 Kommentare, 1 Danke

Hallo die Damen und Herren Spezialisten,

ich hoffe heute zum 3. Mal auf Eure geschätzte Hilfe...

Die gegebnene Fakten:

1. Ich habe mehrer txt-Dateien unterschiedlichen Datums in einem Ordner.
2. Die Dateinamen sind variabel - beginnen aber immer mit "SUCESS_" (Bsp: SUCCESS_20160322075527.txt).
3. Die Dateien enthalten Einträge (Zeilen) die immer mit den selben Buchstaben (MS) beginnen.

Was möchte ich:

Ich möchte (am liebsten) ein Makro in Excel, dass mir von allen Dateien mit aktuellem Datum in Spalte A den Dateinamen und daneben in Spalte B die Anzahl der in der Datein enthaltenen Zeilen die mit "MS" beginnen ausgibt - Bsp:

-------------------------- A ------------------------------------------------- B
SUCCESS_20160322075527.txt -------------------------- 12

Ich habe bereits Funktionen, die mir die Anzahl aktueller Dateien ermitteln - aber ich bekomme das nicht angepasst.

Dann habe ich folgendes, das mir aber jede Zeile zurückgibt (ich benötige aber nur die Anzahl):


Sub Anzahl_Verbuchte_ermitteln()

Dim sWord As String, sPath As String, sSearchPath As String, FileName As String, InputData
Dim AnzFound As Integer
Dim Anzahl As String
AnzFound = 0


'Wort nach dem gesucht werden soll

sWord = "MSCONS_"


'Suche nach allen Textdateien im Verzeichnis

sSearchPath = ""C:\Beispiel\SUCCESS_*.txt"
sPath = "C:\Beispiel\"
FileName = Dir(sSearchPath)
If FileName <> "" Then
Do While FileName <> ""
Open sPath & FileName For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
If InStr(1, InputData, sWord) > 0 Then


'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("Verbuchung").Cells(AnzFound, 1) = FileName
Sheets("Verbuchung").Cells(AnzFound, 2) = InputData

End If
Loop
Close #1


'nächste Datei
FileName = Dir
Loop
End If
End Sub

Ich bin etwas verzweifelt und gespannt, ob meine Idee umsetzbar / anpassbar ist.

Gruß
Olli
Mitglied: colinardo
22.03.2016, aktualisiert 23.03.2016
Hallo Olli,
das gewünschte erreichst du mit folgendem Code.
Die Zeilen sind für dein Verständnis jeweils kommentiert.
Für das Zählen der Zeilen die mit MS beginnen benutze ich eine Regular-Expressions-Variante, die ist schneller als jede Zeile einer Datei mit einer FOR-Schleife durchlaufen zu müssen, zusätzlich hat man wesentlich mehr Möglichkeiten bestimmte Zeichenfolgen zu finden. Das ^ im Pattern bedeutet suche den Begriff nur am Anfang einer Zeile. Bitte beachte eventuell verwendete Sonderzeichen die in einem Regex-String besondere Bedeutungen haben (s. verlinktes Tutorial oben).
Grüße Uwe
Bitte warten ..
Mitglied: OlliMuc
22.03.2016, aktualisiert um 12:40 Uhr
Hallo Uwe,

vielen Dank erstmal für deine Arbeit und deine Erläuterungen! :) face-smile

Im Abschnitt "Inhalt der Datei in Variable speichern" kommt ein Laufzeitfehler:

strContent = fso.OpenTextfile(file.Path, 1).ReadAll()

Sind das eventuell zu viele Dateien? Stand jetzt liegen dort 16 Dateien - allerdings nur mit 39 KB insgesamt, an der Größe dürfte es wohl nicht scheitern :D

Einen Syntaxfehler kann ich, mangel Erfahrung, leider so schnell nicht sehen...

Ist es eventuell ein Schreibfehler bei "OpenTextfile" oder eine fehlende Definition?
Bitte warten ..
Mitglied: colinardo
22.03.2016, aktualisiert um 14:06 Uhr
Zitat von @OlliMuc:
Im Abschnitt "Inhalt der Datei in Variable speichern" kommt ein Laufzeitfehler:

strContent = fso.OpenTextfile(file.Path, 1).ReadAll()

Sind das eventuell zu viele Dateien?
Nein, das liegt an der Kodierung der Dateien, ob ASCII oder Unicode.

Nehme stattdessen mal diese Zeile:

Der letzte Parameter legt die Kodierung deiner Dateien fest:

Bitte warten ..
Mitglied: OlliMuc
22.03.2016 um 13:55 Uhr
Habe getestet:

strContent = fso.OpenTextfile(file.Path, 1, False, -2).ReadAll()
strContent = fso.OpenTextfile(file.Path, 2, False, 0).ReadAll()
strContent = fso.OpenTextfile(file.Path, -2, False, 0).ReadAll()
strContent = fso.OpenTextfile(file.Path, 0, False, -2).ReadAll()


Ohne Erfolg...

Kannst du nochmal helfen? :) face-smile
Bitte warten ..
Mitglied: colinardo
22.03.2016, aktualisiert um 14:04 Uhr
Zitat von @OlliMuc:

Habe getestet:

strContent = fso.OpenTextfile(file.Path, 1, False, -2).ReadAll()
strContent = fso.OpenTextfile(file.Path, 2, False, 0).ReadAll()
strContent = fso.OpenTextfile(file.Path, -2, False, 0).ReadAll()
strContent = fso.OpenTextfile(file.Path, 0, False, -2).ReadAll()

Nein, nicht den zweiten Parameter ändern X) ich hatte ja extra geschrieben nur den letzten Parameter ändern !

Funktioniert hier einwandfrei auch mit Unicode-Files. Ansonsten musst du mal eine deiner Dateien zum Download bereitstellen, vermutlich haben sie eine seltene oder unübliche Kodierung.
Bitte warten ..
Mitglied: OlliMuc
22.03.2016 um 14:26 Uhr
Oh mei .. stimmt, hab zu schnell gelesen. :) face-smile

Hab aber noch immer keinen Erfolg - wie kann ich dir eine Beispieldatei zur Verfügung stellen?
Bitte warten ..
Mitglied: OlliMuc
22.03.2016 um 14:40 Uhr
Hab ANSI - Zeichensatz und Dateityp UNIX
Bitte warten ..
Mitglied: colinardo
22.03.2016, aktualisiert um 15:58 Uhr
Zitat von @OlliMuc:

Hab ANSI - Zeichensatz und Dateityp UNIX
Auch damit hier null issues

Ich schick dir eine PM mit meiner Mail-Adresse.
Bitte warten ..
Mitglied: OlliMuc
23.03.2016 um 07:51 Uhr
Ist gesendet. :) face-smile
Bitte warten ..
Mitglied: OlliMuc
23.03.2016 um 07:52 Uhr
Nochmal getestet - heut kam "Einlesen hinter Dateiende"..
Bitte warten ..
Mitglied: colinardo
23.03.2016, aktualisiert um 08:10 Uhr
Zitat von @OlliMuc:

Nochmal getestet - heut kam "Einlesen hinter Dateiende"..
Das kann nur kommen wenn in deinem Ordner leere Dateien vorhanden sind. Ist das der Fall?


Es scheinen bei die einfach ein paar Files aus der Masse herauszufallen bei denen es Probleme gibt.

p.s. mit deinem File gibt es hier keinerlei Probleme bei der Auswertung. Kann ich dir gerne zeigen.
Bitte warten ..
Mitglied: OlliMuc
23.03.2016 um 08:09 Uhr
Letzte Ergänzung: Laufzeitfehler "62" steht noch dabei
Bitte warten ..
Mitglied: OlliMuc
23.03.2016 um 08:10 Uhr
Ja, es kann zu leeren Dateien kommen - dann wird das wohl der Fehler sein :/

Gibt es dafür eine Lösung? Ich kann die leeren Dateien nicht aussortierne lassen, mangels Schreibrechten.
Bitte warten ..
Mitglied: colinardo
23.03.2016, aktualisiert um 08:13 Uhr
Zitat von @OlliMuc:

Letzte Ergänzung: Laufzeitfehler "62" steht noch dabei

Wie gesagt, es scheinen bei dir einfach ein paar Files aus der Masse herauszufallen mit denen es Probleme gibt.

Ein On Error Resume Next im Kopf des Skripts kann diese überspringen, aber die Ursache bei deinen Dateien kann ich von hier aus leider nicht feststellen, sorry.
Mache das schon ewig damit und noch nie Probleme gehabt. Also liegt es an einigen eurer Files.
Bitte warten ..
Mitglied: colinardo
23.03.2016 um 08:56 Uhr
Ist oben im Code eingebaut.

Grüße aus dem Flieger nach Madrid ;-) face-wink
Bitte warten ..
Mitglied: OlliMuc
23.03.2016 um 09:20 Uhr
Läuft, alles super!

Uwe, vielen, vielen Dank - das waren deine guten Taten für 2 Tage ;-) face-wink ... und du hattest hoffentlich einen guten Flug, wenn du das hier liest.

Hab' da nun wirklich was gelernt...

Schließe die Frage hiermit.
Bitte warten ..
Mitglied: OlliMuc
23.03.2016 um 12:40 Uhr
Ähem .. eine Frage hätte ich doch noch .. wenn ich in einem zweiten Modul diesselbe Auswertung machen will - aber für Dateien die älter sind als heute? Muss ich dort ein eigenen Objekt definieren, dass ich mit "Date" abgleiche?
Bitte warten ..
Mitglied: colinardo
23.03.2016, aktualisiert um 12:51 Uhr
Zitat von @OlliMuc:

Ähem .. eine Frage hätte ich doch noch .. wenn ich in einem zweiten Modul diesselbe Auswertung machen will - aber für Dateien die älter sind als heute? Muss ich dort ein eigenen Objekt definieren, dass ich mit "Date" abgleiche?
In dieser Zeile:
Kannst du das Date durch ein anderes Datums-Objectr ersetzen´, z.B. für den gestrigen Tag:
setzt du stattdessen das hier ein DateAdd("d",-1,Date)
Siehe http://www.techonthenet.com/excel/formulas/dateadd.php

Grüße Uwe
Bitte warten ..
Mitglied: OlliMuc
23.03.2016 um 13:34 Uhr
Läuft! :) face-smile

Danke und vor allem Danke für den Link.

Hab eine schöne Zeit in Madrid - und pass auf dich auf.

Grüße Oliver
Bitte warten ..
Heiß diskutierte Inhalte
Off Topic
Realistische Gehaltsvorstellung für eine "IT-Allroundkraft"
gelöst JiggyLeeVor 1 TagFrageOff Topic23 Kommentare

Hallo an alle, ich hege momentan den Wunsch mich von der alten verstaubten Behörden Bürokratie und langweiliger Aufgaben los zu lösen und in einem ...

LAN, WAN, Wireless
Starlink im Unternehmen?
0xFFFFVor 9 StundenFrageLAN, WAN, Wireless30 Kommentare

Guten Morgen Admins, leider leiden wir darunter, dass wir uns hier in DE noch in einem Entwicklungsland was die Internetanbindung angeht, sehr. Nun kam ...

Microsoft
Datenkrake - Browser
DennisWeberVor 1 TagErfahrungsberichtMicrosoft10 Kommentare

Hallo zusammen, ich empfehle euch mal definitiv in "Temp" Verzeichnis eures Browsers zu schauen. Es war für mich erschreckend, wie viele wichtige Dokumente und ...

Off Topic
Klimaanlage im Serverraum
gelöst imebroVor 6 StundenFrageOff Topic19 Kommentare

Hallo, wir haben einen kleinen Serverraum (viell. 5 - 6 m²), in dem ein Serverschrank steht. Der Raum hat kein Fenster!!! Darin befinden sich ...

Netzwerkmanagement
Sicherheitsrisiken Synology DS Admin Konto
RitchtoolsVor 1 TagFrageNetzwerkmanagement6 Kommentare

Hallo Zusammen, ich habe die Pflege von einem Firmen NAS übernommen (Synology) es sind mehrere Rechner im Netzwerk die auf Daten zugreifen. Leider hat ...

Grafikkarten & Monitore
Monitorhalterung mit 80cm Armlänge
ben1300Vor 1 TagFrageGrafikkarten & Monitore7 Kommentare

Guten Abend ! ich bin auf der Suche nach einer Monitorhalterung, im besten Fall ohne Bohrung für einen 28" Monitor (Vesa Halterung). Nun kommt ...

Windows 10
Windows 10 hängt bei Neustart immer bei "Bitte warten" über Stunden
gelöst Odde23Vor 7 StundenFrageWindows 1023 Kommentare

Ich habe seit längerem, um genau zu sein seit gut einem Jahr, da wurde der Rechner gekauft, das Problem, dass der Rechner bei einem ...

Cloud-Dienste
Cloud PBX bzw. IP Telefon für Ausland
decehakanVor 1 TagFrageCloud-Dienste3 Kommentare

Hallo Zusammen, Ich suche Cloud Telefon ( Cloud PBX, IP-Telefon), sodass ich von Ausland aus über eine deutsche Rufnummer auf mein Handy erreichbar bin. ...