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

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

Frage Entwicklung VB for Applications

Mitglied: harry8m

harry8m (Level 1) - Jetzt verbinden

04.02.2010 um 08:16 Uhr, 12662 Aufrufe, 24 Kommentare

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
Mitglied: H41mSh1C0R
04.02.2010 um 08:47 Uhr
"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:

http://www.administrator.de/Daten_mit_bestimmten_Kriterien_aus_Textdate ...
Bitte warten ..
Mitglied: bastla
04.02.2010 um 09:01 Uhr
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
Bitte warten ..
Mitglied: H41mSh1C0R
04.02.2010 um 09:17 Uhr
^^ das Leerzeichen als Delimiter ist auch übel xD

Textdateien im CVS stil machen sich da schon besser =)
Bitte warten ..
Mitglied: bastla
04.02.2010 um 09:30 Uhr
@H41mSh1C0R
^^ das Leerzeichen als Delimiter ist auch übel xD
Wer will's schon leicht haben ...

Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
01.
Sub Sammeln() 
02.
 
03.
Ordner = "D:\Daten" 
04.
Dateityp = LCase("txt") 
05.
Felder = Array("Codename", "Specification", "Technology", "Core Stepping") 
06.
 
07.
MaxFeldIndex = UBound(Felder) 
08.
Dim FeldL() As Integer 
09.
ReDim FeldL(MaxFeldIndex) 
10.
For i = 0 To MaxFeldIndex 
11.
    FeldL(i) = Len(Felder(i)) 
12.
Next 
13.
 
14.
Zeile = 2 
15.
Rows(CStr(Zeile) & ":65536").ClearContents 
16.
 
17.
Set fso = CreateObject("Scripting.FileSystemObject") 
18.
For Each Datei In fso.GetFolder(Ordner).Files 
19.
    If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp Then 
20.
        Daten = Datei.OpenAsTextStream.ReadAll 
21.
        Cells(Zeile, 1) = fso.GetBaseName(Datei.Name) 
22.
        For i = 0 To MaxFeldIndex 
23.
            Pos = InStr(Daten, Felder(i)) 
24.
            If Pos > 0 Then 
25.
                Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0)) 
26.
                Cells(Zeile, i + 2).Value = Wert 
27.
            End If 
28.
        Next 
29.
       Zeile = Zeile + 1 
30.
    End If 
31.
Next 
32.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: harry8m
04.02.2010 um 10:40 Uhr
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.....
Bitte warten ..
Mitglied: bastla
04.02.2010 um 11:52 Uhr
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
Bitte warten ..
Mitglied: utopia
04.02.2010 um 12:24 Uhr
Bitte warten ..
Mitglied: harry8m
04.02.2010 um 12:58 Uhr
Ähem, OK DANKE!

Das tollste Forum und die nettesten Leute !!

THX bastla

LG
harry8m
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 16:51 Uhr
Zitat von bastla:

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

Sollte sich aber mit VBA auch anhand der Feldnamen lösen lassen:
01.
Sub Sammeln() 
02.
>  
03.
> Ordner = "D:\Daten" 
04.
> Dateityp = LCase("txt") 
05.
> Felder = Array("Codename", "Specification", "Technology", "Core Stepping") 
06.
>  
07.
> MaxFeldIndex = UBound(Felder) 
08.
> Dim FeldL() As Integer 
09.
> ReDim FeldL(MaxFeldIndex) 
10.
> For i = 0 To MaxFeldIndex 
11.
>     FeldL(i) = Len(Felder(i)) 
12.
> Next 
13.
>  
14.
> Zeile = 2 
15.
> Rows(CStr(Zeile) & ":65536").ClearContents 
16.
>  
17.
> Set fso = CreateObject("Scripting.FileSystemObject") 
18.
> For Each Datei In fso.GetFolder(Ordner).Files 
19.
>     If LCase(fso.GetExtensionname(Datei.Name)) = Dateityp Then 
20.
>         Daten = Datei.OpenAsTextStream.ReadAll 
21.
>         Cells(Zeile, 1) = fso.GetBaseName(Datei.Name) 
22.
>         For i = 0 To MaxFeldIndex 
23.
>             Pos = InStr(Daten, Felder(i)) 
24.
>             If Pos > 0 Then 
25.
>                 Wert = Trim(Split(Mid(Daten, Pos + FeldL(i)), vbCrLf)(0)) 
26.
>                 Cells(Zeile, i + 2).Value = Wert 
27.
>             End If 
28.
>         Next 
29.
>        Zeile = Zeile + 1 
30.
>     End If 
31.
> Next 
32.
> End Sub 
33.
> 
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
Bitte warten ..
Mitglied: bastla
24.03.2014, aktualisiert um 18:40 Uhr
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
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 19:12 Uhr
Bastla du bist der beste
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
Bitte warten ..
Mitglied: bastla
24.03.2014 um 19:26 Uhr
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
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 19:40 Uhr
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
Da viele Dateien mit us, pa, aed, beb usw. anfangen.

Grüsse
Garfield81
Bitte warten ..
Mitglied: bastla
24.03.2014 um 19:59 Uhr
Hallo garfield81!

In diesem Fall müsstest Du zwischen Zeile 4 und 5 einfügen:
01.
Prefix = "#chzu#chru#chrg#" 'nur Dateien, deren Name mit diesen Zeichen beginnt, verarbeiten 
02.
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
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 20:20 Uhr
Hallo bastla

ersetzt und es funktioniert 1A
Unglaublich wie du das so schnell aus dem Ärmel zückst. Da muss ich noch sehr, sehr viel lernen bis ich so weit bin
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
Bitte warten ..
Mitglied: bastla
24.03.2014 um 20:26 Uhr
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
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 20:43 Uhr
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
Bitte warten ..
Mitglied: bastla
24.03.2014 um 20:48 Uhr
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
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 20:49 Uhr
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
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
Bitte warten ..
Mitglied: garfield81
24.03.2014, aktualisiert um 21:39 Uhr
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</code>

Grüsse
Garfield81
Bitte warten ..
Mitglied: bastla
24.03.2014, aktualisiert um 21:04 Uhr
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
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 21:05 Uhr
Hallo Bastla,

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

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


beschrieben.

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

01.
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
Bitte warten ..
Mitglied: bastla
24.03.2014 um 21:09 Uhr
Hallo garfield81!

Freut mich, wenn's jetzt passt.

Grüße
bastla
Bitte warten ..
Mitglied: garfield81
24.03.2014 um 21:14 Uhr
Zitat von bastla:

Hallo garfield81!

Freut mich, wenn's jetzt passt.

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.

Ich bin dir jetzt schon Dankbar, für das beantworten meiner Zukünftigen Fragen 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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst HTML-Seiten öffnen und bestimmte Daten auslesen (1)

Frage von makroll10 zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Windows Server
gelöst AD-User einer AD-Gruppe auslesen und in ein File schreiben (15)

Frage von Estefania zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...