harry8m
Goto Top

Aus mehreren .txt bestimmte Werte auslesen und in ein Excelsheet schreiben

Hallo,
Bin neu hier und bräuchte eine schnelle Lösung.
Wir haben einige hundert .txt Dateien. in denen stehen definierte Inhalte mit Werten. Nun möchte ich alle .txt auf bestimmte Einträge durchsuchen und die gefunden Einträge in ein Ecxelblatt untereinander einfügen.

Beispiel:

dateiname.txt


Codename Penryn
Specification Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50GHz
Package (platform ID) Socket P (478) (0x7)
CPUID 6.7.6
Extended CPUID 6.17
Core Stepping C0
Technology 45 nm


erhalten möchte ich nun:

Excel:

A:B:C:D
dateiname:Penryn:Intel(R) Core(TM)2 Duo CPU T9300 @ 2.50GHz:45 nm
wobei ich noch weitere Werte erhalten möchte (max.10)

Kann mir da jemand BITTE helfen, kannmich einfach viel zu wenig damit aus....

Danke

Harry

Content-Key: 135124

Url: https://administrator.de/contentid/135124

Printed on: April 19, 2024 at 17:04 o'clock

Member: H41mSh1C0R
H41mSh1C0R Feb 04, 2010 at 07:47:56 (UTC)
Goto Top
"Kann mir da jemand BITTE helfen, kannmich einfach viel zu wenig damit aus...."

Nichts für ungut, aber es gibt sowas wie eine SUFU.

Suche einfach mal nach

- "Textdatei in Excel auslesen"
- "per VBA Textdateien auslesen"

oder ähnlichem.

Es gibt soooooo viele schön dokumentierte Quellen.

Und der beste Weg die eigene Unkenntnis zu vertreiben ist die anfangen zu lesen und nicht wenn einer eine Lösung geliefert hat, per C&P übernehmen und freuen.


Edit:

mal so als Tipp am Rande:

Daten mit bestimmten Kriterien aus Textdatei in Excel einlesen
Member: bastla
bastla Feb 04, 2010 at 08:01:32 (UTC)
Goto Top
Hallo harry8m und willkommen im Forum!

Aus Deiner Beschreibung geht nicht hervor, wie die einzelnen Zeilen aufzuteilen sind - gibt es ein Trennzeichen (zB TAB) zwischen Feldnamen (zB "Core Stepping) und Werten ("C0"), oder muss der Name "weggefiltert" werden, um den Wert zu erhalten?

Grüße
bastla
Member: H41mSh1C0R
H41mSh1C0R Feb 04, 2010 at 08:17:11 (UTC)
Goto Top
^^ das Leerzeichen als Delimiter ist auch übel xD

Textdateien im CVS stil machen sich da schon besser =)
Member: bastla
bastla Feb 04, 2010 at 08:30:12 (UTC)
Goto Top
@H41mSh1C0R
^^ das Leerzeichen als Delimiter ist auch übel xD
Wer will's schon leicht haben ... face-wink

Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
Sub Sammeln()

Ordner = "D:\Daten"  
Dateityp = LCase("txt")  
Felder = Array("Codename", "Specification", "Technology", "Core Stepping")  

MaxFeldIndex = UBound(Felder)
Dim FeldL() As Integer
ReDim FeldL(MaxFeldIndex)
For i = 0 To MaxFeldIndex
    FeldL(i) = Len(Felder(i))
Next

Zeile = 2
Rows(CStr(Zeile) & ":65536").ClearContents  

Set fso = CreateObject("Scripting.FileSystemObject")  
For Each Datei In fso.GetFolder(Ordner).Files
    If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp Then
        Daten = Datei.OpenAsTextStream.ReadAll
        Cells(Zeile, 1) = fso.GetBaseName(Datei.Name)
        For i = 0 To MaxFeldIndex
            Pos = InStr(Daten, Felder(i))
            If Pos > 0 Then
                Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
                Cells(Zeile, i + 2).Value = Wert
            End If
        Next
       Zeile = Zeile + 1
    End If
Next
End Sub
Grüße
bastla
Member: harry8m
harry8m Feb 04, 2010 at 09:40:14 (UTC)
Goto Top
Hallo bastla,


Vielen, vielen Dank!!!!!

Genau so was hab ich mir vorgestellt.

Nur noch eins, beim Ausführen kommen die Zwischenräume als "Kästchen", sind wahrscheinlich TABs. Lassen sich diese noch entfernen?
Habs händisch gemacht, csv speichern, editieren, speichern und ins Excel.

Großes LOB !! für schnelle Antwort.

THX

@H41mSh1C0R: Hab die SUFU genutzt, nur nicht für mich das richtige gefunden.....
Member: bastla
bastla Feb 04, 2010 at 10:52:40 (UTC)
Goto Top
Hallo harry8m!
Nur noch eins, beim Ausführen kommen die Zwischenräume als "Kästchen", sind wahrscheinlich TABs
Deshalb meine Frage oben ...

Ändere die Zeile 25 auf
Wert = Replace(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0), vbTab, "")
... und das "Replace()" hättest Du tatsächlich in dem von H41mSh1C0R verlinkten Beitrag gefunden.

Grüße
bastla
Member: utopia
utopia Feb 04, 2010 at 11:24:48 (UTC)
Goto Top
Member: harry8m
harry8m Feb 04, 2010 at 11:58:42 (UTC)
Goto Top
Ähem, OK DANKE!

Das tollste Forum und die nettesten Leute !!

THX bastla

LG
harry8m
Member: garfield81
garfield81 Mar 24, 2014 at 15:51:05 (UTC)
Goto Top
Zitat von @bastla:

@H41mSh1C0R
> ^^ das Leerzeichen als Delimiter ist auch übel xD
Wer will's schon leicht haben ... face-wink

Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
Sub Sammeln()
> 
> Ordner = "D:\Daten"  
> Dateityp = LCase("txt")  
> Felder = Array("Codename", "Specification", "Technology", "Core Stepping")  
> 
> MaxFeldIndex = UBound(Felder)
> Dim FeldL() As Integer
> ReDim FeldL(MaxFeldIndex)
> For i = 0 To MaxFeldIndex
>     FeldL(i) = Len(Felder(i))
> Next
> 
> Zeile = 2
> Rows(CStr(Zeile) & ":65536").ClearContents  
> 
> Set fso = CreateObject("Scripting.FileSystemObject")  
> For Each Datei In fso.GetFolder(Ordner).Files
>     If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp Then
>         Daten = Datei.OpenAsTextStream.ReadAll
>         Cells(Zeile, 1) = fso.GetBaseName(Datei.Name)
>         For i = 0 To MaxFeldIndex
>             Pos = InStr(Daten, Felder(i))
>             If Pos > 0 Then
>                 Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
>                 Cells(Zeile, i + 2).Value = Wert
>             End If
>         Next
>        Zeile = Zeile + 1
>     End If
> Next
> End Sub
> 
Grüße
bastla


Hallo zusammen,

Bin ein totaler Neuling und bin nach langem Googlen auf diese Seite gestossen.
War genau auf der Suche nach so einem VBA Script (Vielen Dank für das Bereitstellen). Habe die Felder meinen Bedürfnissen angepasst, aber nach einer Weile einlesen kommt der Eintrag:
Input paste end of file.
Habe schon alles versucht und das ganze Web durchforstet, aber irgendwie bringe ich das nicht hin.

Kann mir da jemand helfen?
Hab schon alles versucht, aber bis jetzt habe ich noch keine Lösung

Gruss
Garfield81
Member: bastla
bastla Mar 24, 2014 updated at 17:40:16 (UTC)
Goto Top
Hallo garfield81 und willkommen im Forum!

Ich würde ja auf eine leere Datei (Dateigröße 0 Byte) tippen. Falls es daran liegt, sollte folgende Zeile 19 helfen:
If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp And Datei.Size > 0 Then
Damit würde diese Datei dann übersprungen.

Grüße
bastla
Member: garfield81
garfield81 Mar 24, 2014 at 18:12:59 (UTC)
Goto Top
Bastla du bist der beste face-smile
Genau das war es, auf das wäre ich nie gekommen. (Wie gesagt noch ein totaler Neuling, man sieht zum Teil vor lauter Bäumen den Wald nicht mehr)

Vielleicht kannst du mir noch eine Frage beantworten,
Ich habe im Ordner folgende Text Dateien:

chzu......txt
chru....txt
chrg....txt
chgs...txt
chmb....txt

zusammen sind es ca. 900 Text Dateien

Ich brauche aber nur alle Text Dateien von chzu, chru, chrg im Excel aufgelistet. Kann man die anderen irgendwie Ausfiltern lassen.
Text Dateien dürfen im Ordner aber nicht gelöscht werden.

Vielen Lieben Dank

Grüsse
Garfield81
Member: bastla
bastla Mar 24, 2014 at 18:26:14 (UTC)
Goto Top
Hallo garfield81!
Ich brauche aber nur alle Text Dateien von chzu, chru, chrg im Excel aufgelistet.
Kannst Du da noch konkretisieren? Meinst Du alle mit "ch" beginnenden Dateien, oder tatsächlich nur die 3 Genannten?

Grüße
bastla
Member: garfield81
garfield81 Mar 24, 2014 at 18:40:59 (UTC)
Goto Top
Hallo bastla

Genial wäre, wenn man nur die 3 chzu, chru und chrg beginnenden Dateien (Sind ca. 400-500 Dateien) filtern kann.

Bin aber auch schon mit den ch beginnenden zufrieden face-smile
Da viele Dateien mit us, pa, aed, beb usw. anfangen.

Grüsse
Garfield81
Member: bastla
bastla Mar 24, 2014 at 18:59:11 (UTC)
Goto Top
Hallo garfield81!

In diesem Fall müsstest Du zwischen Zeile 4 und 5 einfügen:
Prefix = "#chzu#chru#chrg#" 'nur Dateien, deren Name mit diesen Zeichen beginnt, verarbeiten  
PrefixLen = 4 'einheitliche Länge des Präfixes (Zeichenanzahl)  
und die Zeile 19 durch
    If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp And Datei.Size > 0 And InStr(Prefix, "#" & LCase(Left(Datei.Name, PrefixLen)) & "#") > 0 Then
ersetzen (ungetestet).

Die in Zeile 4 angegebenen Werte ("chzu" etc) müssen in Kleinbuchstaben geschrieben und, wie gezeigt, durch "#" begrenzt sein.

Grüße
bastla
Member: garfield81
garfield81 Mar 24, 2014 at 19:20:49 (UTC)
Goto Top
Hallo bastla

ersetzt und es funktioniert 1A face-smile
Unglaublich wie du das so schnell aus dem Ärmel zückst. Da muss ich noch sehr, sehr viel lernen bis ich so weit bin face-smile
Jetzt sehe ich im Excel nur noch dass was ich will. Genial


Jetzt fehlt mir nur noch das Änderungsdatum der Files und dann bin ich überglücklich.
Habe es mit FileDateTime versucht, aber geht leider nicht. Bin da glaube ich auf dem falschen Weg.


Grüsse
Garfield
Member: bastla
bastla Mar 24, 2014 at 19:26:37 (UTC)
Goto Top
Hallo garfield81!
Jetzt fehlt mir nur noch das Änderungsdatum der Files und dann bin ich überglücklich.
Verwende
Datei.DateLastModified
(Erstellungsdatum wäre übrigens ".DateCreated").

Grüße
bastla
Member: garfield81
garfield81 Mar 24, 2014 at 19:43:43 (UTC)
Goto Top
Hallo bastla,

Danke für den Input.

Klappt soweit, aber nun kommt immer die Meldung Objekt erforderlich und das Datum ist falsch formatiert.

Danke und Güsse
Garfield81
Member: bastla
bastla Mar 24, 2014 at 19:48:53 (UTC)
Goto Top
Hallo garfield81!

Poste doch bitte Deinen aktuellen Code (unter Verwendung der passenden Formatierung) und erkläre auch kurz, was Du mit "falsch formatiert" meinst ...

Grüße
bastla
Member: garfield81
garfield81 Mar 24, 2014 at 19:49:24 (UTC)
Goto Top
Zitat von @garfield81:

Hallo bastla,

Danke für den Input.

Klappt soweit, aber nun kommt immer die Meldung Objekt erforderlich und das Datum ist falsch formatiert.

Danke und Güsse
Garfield81

Habe mich vertippt, darum kam die Meldung Objekt erforderlich face-wink
Aber das Datum formatiert er nicht korrekt:
Excel --> 13.01.1900 00:43:12
Datei --> 13.03.2014 15:26

Hast du eine Ahnung woran das liegen könnte?

Grüsse
Garfield81
Member: garfield81
garfield81 Mar 24, 2014 updated at 20:39:49 (UTC)
Goto Top
Hier mein Code:

Next
Zeile = 2
Rows(CStr(Zeile) & ":655360").ClearContents
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In fso.GetFolder(Ordner).Files
If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp And Datei.Size > 0 And InStr(Prefix, "#" & LCase(Left(Datei.Name, PrefixLen)) & "#") > 0 Then
Daten = Datei.OpenAsTextStream.ReadAll
Cells(Zeile, 9) = fso.GetBaseName(Datei.Name)
Cells(Zeile, 10) = fso.GetBaseName(Datei.DateLastModified)
For i = 0 To MaxFeldIndex
Pos = InStr(Daten, Felder(i))
If Pos > 0 Then
Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0))
Cells(Zeile, i + 1).Value = Wert
End If
Next
Zeile = Zeile + 1
End If
Next
MsgBox "Daten Aktualisiert"

End Sub

Grüsse
Garfield81
Member: bastla
bastla Mar 24, 2014 updated at 20:04:50 (UTC)
Goto Top
Hallo garfiel81!

Sorry - kann ich nicht nachvollziehen. Auch ohne eine Zellformatierung vorzunehmen wird bei mir (Excel 2010) das Datum nach einem Test mit
Cells(Zeile, "M").Value = Datei.DateLastModified
im Format "TT.MM.JJJJ hh:mm" angezeigt.

[Edit] Posts haben sich zeitlich überschnitten ...

In Deiner Zeile 24 hast Du ein unnötiges "fso.GetBaseName()" (damit wird aus einem Dateinamen nur der Name, ohne Dateityp, extrahiert, was natürlich bei einer Datumsangabe alles ab dem letzten Punkt = ab der Jahreszahl wegschneidet).
[/Edit]

Grüße
bastla
Member: garfield81
garfield81 Mar 24, 2014 at 20:05:26 (UTC)
Goto Top
Hallo Bastla,

Hmmm Sorry mein Fehler, hab das Buch VBA mit Excel vor mir und dort ist es auch mit

Cells(Zeile, "M").Value = Datei.DateLastModified  


beschrieben.

Aber hab zu wenig ins Buch geschaut und zu stark auf den Code oberhalb

Cells(Zeile, 9) = fso.GetBaseName(Datei.Name)


und diesen kopiert und verändert... Und das war auch gleich der Fehler.

Nun klappt es auf jeden Fall.

Vielen Dank

Grüsse
Garfield81
Member: bastla
bastla Mar 24, 2014 at 20:09:15 (UTC)
Goto Top
Hallo garfield81!

Freut mich, wenn's jetzt passt. face-smile

Grüße
bastla
Member: garfield81
garfield81 Mar 24, 2014 at 20:14:27 (UTC)
Goto Top
Zitat von @bastla:

Hallo garfield81!

Freut mich, wenn's jetzt passt. face-smile

Grüße
bastla

Hallo Bastla,

Danke nochmals für deine Hilfe, stand so einige male auf dem Schlauch......

Wie gesagt muss noch viel lernen was VBA Codes angeht. face-smile

Ich bin dir jetzt schon Dankbar, für das beantworten meiner Zukünftigen Fragen face-wink Hehe

Komme so langsam auf den Geschmack und werde sicherlich noch einiges mit VBA Codierung ausprobieren.

Und da könnten schon noch ein paar fragen auftauchen.

Grüsse
Garfield81
Member: BjoernUsw
BjoernUsw Jan 16, 2017 updated at 10:24:13 (UTC)
Goto Top
Hallo Zusammen,
ich bin ebenfalls VBA Neuling und komme mit Google nicht weiter.
Ich habe Dateien mit der Formatierung mit variabler Blockanzahl...
Datum: 
       06.12.2016
Anfangszeit:
       08:51:30
Endzeit
       10:41:33
Arbeitszeit (incl. 30 min Pause):
       01:50:02
Du hast 06:39:57 zu wenig gearbeitet!

--------------------------------------------

Datum: 
       06.12.2016
Anfangszeit:
       10:42:50
Endzeit
       11:09:41
Arbeitszeit (incl. 30 min Pause):
       00:26:51
Du hast 06:13:06 zu wenig gearbeitet!

--------------------------------------------

Datum: 
       06.12.2016
Anfangszeit:
       11:10:12
Endzeit
       15:33:49
Arbeitszeit (incl. 30 min Pause):
       04:23:37
Du hast 01:49:29 zu wenig gearbeitet!
.. und würde daraus gerne die erste Anfangszeit und die letzte Arbeitszeit auslesen und nicht direkt in Felder, sondern erst in Variablen schreiben.
Das Auslesen der Werte und schreiben in Felder habe ich in einem Testarbeitsblatt schon hinbekommen, allerdings sind die Spalten in der Mappe, in der das Script laufen soll, anders benannt und sollen auch nicht verändert werden.