Einlesen erster und letzter Zeile aus Textfile

Hallo zusammen,
ich habe einen Ordner mit vielen Textdateien. Nun suche ich ein Programm welches mir von allen Dateien jeweils

  • den Dateinamen (Spalte A)
  • das Erstellungsdatum (Spalte B)
  • das Datum letzter Änderung (Spalte C)
  • die erste Zeile der Datei (Spalte D)
  • die letzte Zeile der Datei (Spalte E)
    in einliest.

Kann mir hierbei jemand helfen?

Hi Thomas,

womit? VB6, VBA oder VBS?

Gruß Rainer

Hallo Rainer,
wenn ich Microsoft Excel 2007 öffne und dort im Entwicklungsbereich „Visual Basic“ öffne finde ich hier „Microsoft Visual Basic 6.5.“

Ich hoffe das hilft weiter.

Danke und Gruß
Thomas

Hallo Thomas,

wenn ich Microsoft Excel 2007 öffne und dort im
Entwicklungsbereich „Visual Basic“ öffne finde ich hier
„Microsoft Visual Basic 6.5.“

ich weiß. Aber lass das weg. Denn es sagt nicht eindeutig aus welche Excel/Wordversion du hast.
Die Angabe von Exceö07 war schon vollkomen in Ordnung. Rainer hat nicht gescrollt o.ä. :smile:

Ich hoffe das hilft weiter.

Lade bitte so eine Textdatei hoch mit fileupload o.ä., s. FAQ:2606
Einige Zeilen reichen, mir ghet es um die Steuerzeichen zwischen den Zeilen und am Dateiende. Manche Textprogramme machen das unterschiedlich.

Gruß
Reinhard

Hallo Reinhard,

stimmt! :smile: Ich habe nur den Text gelesen und ‚Excel‘ in den ‚Stichworten‘ übersehen.

Gruß Rainer

Hi,

Du hattest ja Excel in den Stichworten angegeben, das habe ich übersehen. Sorry.

Reinhard ist ja da, damit halte ich Dein Problem für gelöst. :smile:

Gruß Rainer

Hallo Reinhard,
hier der Link zum Testfile

http://www.file-upload.net/download-4043627/werweiss…

Gruß
Thomas

Hallo Thomas,

http://www.file-upload.net/download-4043627/werweiss…

bin jetzt für 2 Stunden nicht am PC.

@Rainer, wie war das gleich mit Datei auslesen auf einen Streich,
ich muß da immer rumfummeln bis ich das hinkrieg :frowning:
Das mit Space, Get usw.?
Danke.

Gruß
Reinhard

Hallo reinhard,

ungetestet, aber die Tippfehler siehst Du ja … :smile:

Option Explicit

Private Sub Command1\_Click()
 Dim na As String, txt As String, cnt As Long, ff As Integer, Pos As Long
 Dim FirstLine As String, LastLine As String
 ff = FreeFile
 na = "C:\Testfile.txt"
 cnt = FileLen(na)
 txt = Space(cnt)
 Open na For Binary As #ff
 Get #ff, , txt
 Close #ff
 Pos = InStr(txt, vbCrLf)
 FirstLine = Left(txt, Pos - 1)
 Pos = InStrRev(txt, vbCrLf)
 LastLine = Right(txt, Pos)
End Sub

Datum Erstellung und Datum letzte Änderung findest Du mit FSO, da kennst Du Dich vermutlich besser aus als ich. Ich hab’ Script56.chr noch nicht auf dem Rechner. :smile:

Gruß Rainer

ungetestet, aber die Tippfehler siehst Du ja … :smile:

Hallo Rainer,

danke, irgendwie hatte ich es „schlimmer“ in Erinnerung.
Jetzt wo du es mir wieder mal zum k.A. 8ten mal zeigst :smile:
siegt es „machbar“ aus. Also aus dem Kopf heraus.
Denn die zwei Kommas nach Get #1 habe ich gespeichert, wie gesagt
Space auch. Filelen hätte ich auch von mir aus mit Space verknüpft.
Heureka, ich glaub ich hab’s jetzt gerafft *freu*

Zu vbCrLf, schon klar, aber darauf verlasse ich mich nicht (mehr).
Dafür sah ich letztes Jahr zuviele Textdateien die davon abwichen.
Oder sagen wir mal Dateien im Textformat.

Da sah ich z.B. als Zeilentrenner zweimal 13 nacheinander, ohne die 10.
Manchmal war der Zeilentrenner auch noch in der Datei als letzte Bytefolge.
All das wäre sehr schlecht für deinen Code *lächel*

Das ist der Grund warum ich den Anfrager um einen Beispieltext bat.

PS: Virus gefunden? Alles ist möglich aber ich gehe erstmal davon aus daß Zip da eine Bytefolge erzeugt hat die so aussieht wie eine Virusbytefolge.
Wegen OT kannst du ja das beim nächsten „Treffen“ hier berichten :smile:

Gruß
Reinhard

Nachfrage

http://www.file-upload.net/download-4043627/werweiss…

Hallo Thomas,

ich habe sie eben erst angeschaut.
erste zeile: 1/16/2012 8:08:48 AM.850 [EC_CORE]Adapter 5.6.2.0 ()
letzte zeile: 1/16/2012 8:08:59 AM.835 [ELEMENT]SAP Connection returned to pool.

Für mein Interesse, welches Programm hat diese txt-datei erstellt?
Scheinbar fügt es vorne drei Bytes ein um „seine“ Txt-dateien zu erkennen.
Willst du das mit in der Ergebnisliste haben? Ich glaub nicht aber für mich ist es dazu wichtig zu wissen ob es immer drei bytes sind und ob es immer die gleichen sind.
Nimm mal einen Hex-Editor und schaue dir paar txt-dateien an,
die Bytefolge der drei bytes ist EF BB BF

Gruß
Reinhard

Ordner auslesen, Erstellungsdatum, letzte Änderung

ich habe einen Ordner mit vielen Textdateien. Nun suche ich
ein Programm welches mir von allen Dateien jeweils

  • den Dateinamen (Spalte A)
  • das Erstellungsdatum (Spalte B)
  • das Datum letzter Änderung (Spalte C)
  • die erste Zeile der Datei (Spalte D)
  • die letzte Zeile der Datei (Spalte E)
    in einliest.

Hallo Thomas,

Alt+F11, Einfügen—Modul, nachstehenden Code reinkopieren.
In der Prozedur Start diese beiden Codezeilen an deine Gegebenheiten anpassen:
Const strPfad As String = „K:“
With Worksheets(„Tabelle1“)

Dann den VB-Editor schließen. In Excel Alt+F8, Makro „Start“ ausführen lassen.

Gruß
Reinhard

Option Explicit

Dim FSO As Object

Sub Start()
' Copyright Ra&Re 2012
Dim Zei As Long, objGef As Object
Const strPfad As String = "K:\"
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
 .UsedRange.ClearContents
 .Range("A1:E1").Value = Split("Name ErstellD ÄnderungsD ErsteZ LetzteZ")
 Zei = 1
 Set FSO = CreateObject("Scripting.FilesystemObject")
 For Each objGef In FSO.getfolder(strPfad).Files
 If LCase(FSO.getextensionname(objGef)) = "txt" Then
 Call Eintragen(objGef, Zei)
 End If
 Next objGef
 .Columns("A:E").AutoFit
End With
Set FSO = Nothing
Application.ScreenUpdating = True
End Sub

Function Einlesen(PfadDatei) As String
Dim FF As Long, strDatei As String, lngLaenge As Long
FF = FreeFile
lngLaenge = FileLen(PfadDatei)
strDatei = Space(lngLaenge)
Open PfadDatei For Binary As #FF
 Get #FF, , strDatei
Close #FF
Einlesen = strDatei
End Function

Sub Eintragen(PfadDatei As Object, Zei)
Dim T, f1
Set f1 = FSO.GetFile(PfadDatei)
On Error Resume Next
T = Split(Einlesen(PfadDatei), vbCrLf)
With Worksheets("Tabelle1")
 Zei = Zei + 1
 .Cells(Zei, 1) = Mid(PfadDatei, InStrRev(PfadDatei, "\") + 1)
 .Cells(Zei, 2) = f1.DateCreated
 .Cells(Zei, 3) = f1.DateLastModified
 .Cells(Zei, 4) = Mid(T(0), 4)
 .Cells(Zei, 5) = T(UBound(T) - 1)
End With
On Error GoTo 0
End Sub

Hallo Reinhard,
ich habe nun einige Dateien geprüft jedoch keine Datei gefunden die diese Folge enthält.
Gruß
Thomas

Hallo Reinhard,
vielen Dank für Deine Hilfe - funktioniert soweit gut.
Allerdings habe noch etwas entdeckt. Die Werte in Spalte „ErsteZ“ werden am Anfang abgeschnitten - z.B. „15/2011 11:26:33…“ richtig wäre aber „12/15/2011 11:26:33…“. In der Spalte „LetzteZ“ ist alles ok.
Könntest Du mir hierbei nochmals helfen.

Gruß
Thomas

Hallo Reinhard,
wegen meiner Rückfrage - ich habe die Stelle gefunden und geändert. Nun habe ich die erste Zeile vollständig.
Cells(Zei, 4) = Mid(T(0), 4) geändert zu
Cells(Zei, 4) = Mid(T(0), 1)

Gruß und nochmals herzlichen Dank.
Thomas

Allerdings habe noch etwas entdeckt. Die Werte in Spalte
„ErsteZ“ werden am Anfang abgeschnitten - z.B. „15/2011
11:26:33…“ richtig wäre aber „12/15/2011 11:26:33…“. In
der Spalte „LetzteZ“ ist alles ok.

Hallo Thomas,

das hängt damit zusammen daß in deiner beispieldatei in der ersten Zeile
diese drei Zeichen

vorne standen.

Ändere diese Zeile
.Cells(Zei, 4) = Mid(T(0), 4)
zu
.Cells(Zei, 4) = T(0)

Gruß
Reinhard