Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1620to1624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Daten aus Textdatei
25.04.2018 15:21:09
Dogan
Hallo,
ich habe von einem User (Sepp) hier im Portal eine Makro bekommen. Bei diesem werden mir Informationen aus einer Textdatei eingespielt.
Spalte 1: Dateiname
Spalte 2: Änderungsdatum
Spalte 3: Erstelldatum
Spalte 4: Ein Argument aus der Textdatei selbst
Anstelle des Änderungsdatums, brauche ich jetzt aber eher die letzte Zeiterfassung aus der Textdatei. Diese steht in der Textdatei immer in der vorletzten Zeile.
Anbei noch die Excel + Textdatei. Für Hilfe bin ich sehr dankbar...
https://www.herber.de/bbs/user/121281.xlsm
https://www.herber.de/bbs/user/121282.txt

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Textdatei
25.04.2018 17:10:22
UweD
Hallo
ungetestet..
Nur die Ermittlung des Datums
das je zwischen '*** hab ich eingefügt
Sub Dateiliste()
  Dim objFileSearch As clsFileSearch
  Dim lngIndex As Long, lngTemp As Long
  Dim varOutput As Variant, varTemp() As Variant, varValue As Variant
  Dim strPath As String
  Dim FF As Integer
  
  '*** 
  Dim CloseFind As String, PosFind As Integer, TimeFind As Date

  CloseFind = ";Closed; "
  '*** 
  
  strPath = "C:\PIXARGUS_NEU\Backup_Logs\Einzelauswertung" & Cells(1, 2).Value & "\"
  If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

  Call Range(Cells(2, 1), Cells(Rows.Count, 4)).ClearContents
       
  Set objFileSearch = New clsFileSearch

  With objFileSearch
    .NewSearch = True
    .CaseSenstiv = True
    .Extension = "*.log"
    .FolderPath = strPath
    .SearchLike = "*.*"
    .SubFolders = True
    If .Execute(Sort_by_Date_Create, Sort_Order_Descending) > 0 Then
      Redim varOutput(1 To .FileCount, 1 To 4)
      For lngIndex = 1 To .FileCount
        lngTemp = 0
        Erase varTemp
        varOutput(lngIndex, 1) = .Files(lngIndex).FI_FileName
        varOutput(lngIndex, 2) = .Files(lngIndex).FI_LastModify
        varOutput(lngIndex, 3) = .Files(lngIndex).FI_DateCreate
        FF = FreeFile
        Open .Files(lngIndex).FI_FullName For Input As #FF
        Do While Not EOF(FF)
          Redim Preserve varTemp(lngTemp)
          Line Input #FF, varTemp(lngTemp)
          
          '*** 
          PosFind = InStr(varTemp(lngTemp), CloseFind)
          If PosFind > 0 Then
              TimeFind = CDate(Mid(Replace(varTemp(lngTemp), ";", " "), PosFind + Len(CloseFind) + 1))
          End If
          '*** 
          
          lngTemp = lngTemp + 1
        Loop
        Close #FF
        If Ubound(varTemp) > 3 Then
          If InStr(1, varTemp(Ubound(varTemp) - 3), ";") > 0 Then
            varValue = Split(varTemp(Ubound(varTemp) - 3), ";")
            If Ubound(varValue) > 3 Then
              varOutput(lngIndex, 4) = varValue(4)
            End If
          End If
        End If
      Next
    End If
  End With

  Range("A2").Resize(Ubound(varOutput, 1), 4) = varOutput

  Set objFileSearch = Nothing
End Sub
LG UweD
Anzeige
AW: Daten aus Textdatei
26.04.2018 14:53:02
Dogan
Hallo Uwe,
vielen Dank für die rasche Antwort...
das Makro funtkioniert an sich, aber es hat sich an der Ausgabe nichts verändert...
ich möchte anstelle "DateLastModify" die letzte Zeitangabe aus der Textdatei, die in der vorletzten Zeile der Textdatei steht. Quasi brauch ich in der Excel zum Schluss den Startzeitpunkt und den Endzeitpunkt um später die Dauer zu berechnen. Das geht ja mit DateLastModify nicht, da diese sich immer mal verändert...
AW: Daten aus Textdatei
26.04.2018 15:29:46
UweD
Hallo
ich hatte ja auch extra geschrieben, dass es "Nur die Ermittlung des Datums" ist.
wieder ungetestet...

Sub Dateiliste()
Dim objFileSearch As clsFileSearch
Dim lngIndex As Long, lngTemp As Long
Dim varOutput As Variant, varTemp() As Variant, varValue As Variant
Dim strPath As String
Dim FF As Integer
Dim CloseFind As String, PosFind As Integer, TimeFind As Date
CloseFind = ";Closed; "
strPath = "C:\PIXARGUS_NEU\Backup_Logs\Einzelauswertung" & Cells(1, 2).Value & "\"
If Right(strPath, 1)  "\" Then strPath = strPath & "\"
Call Range(Cells(2, 1), Cells(Rows.Count, 4)).ClearContents
Set objFileSearch = New clsFileSearch
With objFileSearch
.NewSearch = True
.CaseSenstiv = True
.Extension = "*.log"
.FolderPath = strPath
.SearchLike = "*.*"
.SubFolders = True
If .Execute(Sort_by_Date_Create, Sort_Order_Descending) > 0 Then
Redim varOutput(1 To .FileCount, 1 To 4)
For lngIndex = 1 To .FileCount
lngTemp = 0
Erase varTemp
varOutput(lngIndex, 1) = .Files(lngIndex).FI_FileName
'varOutput(lngIndex, 2) = .Files(lngIndex).FI_LastModify
varOutput(lngIndex, 3) = .Files(lngIndex).FI_DateCreate
FF = FreeFile
Open .Files(lngIndex).FI_FullName For Input As #FF
Do While Not EOF(FF)
Redim Preserve varTemp(lngTemp)
Line Input #FF, varTemp(lngTemp)
PosFind = InStr(varTemp(lngTemp), CloseFind)
If PosFind > 0 Then
TimeFind = CDate(Mid(Replace(varTemp(lngTemp), ";", " "), PosFind + Len(CloseFind) _
+ 1))
varOutput(lngIndex, 2)= TimeFind
End If
lngTemp = lngTemp + 1
Loop
Close #FF
If Ubound(varTemp) > 3 Then
If InStr(1, varTemp(Ubound(varTemp) - 3), ";") > 0 Then
varValue = Split(varTemp(Ubound(varTemp) - 3), ";")
If Ubound(varValue) > 3 Then
varOutput(lngIndex, 4) = varValue(4)
End If
End If
End If
Next
End If
End With
Range("A2").Resize(Ubound(varOutput, 1), 4) = varOutput
Set objFileSearch = Nothing
End Sub
LG UweD
Anzeige
AW: Daten aus Textdatei
26.04.2018 16:32:22
Dogan
Hi,
ich weiss, dass man bei mir etwas Geduld brauch :)
Das richtige Datum aus der Textdatei wird wiedergegeben. Jetzt bräuchte ich nur noch die Uhrzeit die in der gleichen Zelle abgebildet werden sollte...
AW: Daten aus Textdatei
27.04.2018 08:36:38
UweD
Hallo
die wird bereits mit übergeben.
Versuch mas die Spalte mit TT.MM.JJJJ hh:mm:ss zu formatieren.
LG UweD
AW: Daten aus Textdatei
27.04.2018 12:11:08
Dogan
Hi,
ja das funktioniert. Könnten wir jetzt auch für die 3 Spalte eine Zeitangabe aus der Textdatei nehmen?
Dann könnten wir aus der 4 Zeile der Textdatei die Zeitangabe nehmen und ich hätte auch beides mal das gleiche Format...
Wenn es nicht zu große Umstände macht...
Quasi
Spalte 2 = Zeitangabe aus der vorletzten Zeile
Spalte 3 = Zeitangabe aus der 4. Zeile
Vielen Dank...
Anzeige
AW: Daten aus Textdatei
27.04.2018 14:45:42
UweD
Hallo
nach ähnlichem Prinzip...
Wieder undetestet
Sub Dateiliste()
    Dim objFileSearch As clsFileSearch
    Dim lngIndex As Long, lngTemp As Long
    Dim varOutput As Variant, varTemp() As Variant, varValue As Variant
    Dim strPath As String
    Dim FF As Integer
    
    '*** 
    Dim CloseFind As String, OpenFind As String, PosFind As Integer, TimeFind As Date
    
    OpenFind = ";Opened;"   'ohne Leerzeichen 
    CloseFind = ";Closed; " 'mit Leerzeichen 
    '*** 
    
    strPath = "C:\PIXARGUS_NEU\Backup_Logs\Einzelauswertung" & Cells(1, 2).Value & "\"
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
  
    Call Range(Cells(2, 1), Cells(Rows.Count, 4)).ClearContents
         
    Set objFileSearch = New clsFileSearch
  
    With objFileSearch
      .NewSearch = True
      .CaseSenstiv = True
      .Extension = "*.log"
      .FolderPath = strPath
      .SearchLike = "*.*"
      .SubFolders = True
      If .Execute(Sort_by_Date_Create, Sort_Order_Descending) > 0 Then
        Redim varOutput(1 To .FileCount, 1 To 4)
        For lngIndex = 1 To .FileCount
          lngTemp = 0
          Erase varTemp
          varOutput(lngIndex, 1) = .Files(lngIndex).FI_FileName
          'varOutput(lngIndex, 2) = .Files(lngIndex).FI_LastModify 
          'varOutput(lngIndex, 3) = .Files(lngIndex).FI_DateCreate 
          FF = FreeFile
          Open .Files(lngIndex).FI_FullName For Input As #FF
          Do While Not EOF(FF)
            Redim Preserve varTemp(lngTemp)
            Line Input #FF, varTemp(lngTemp)
            
            '*** 
            PosFind = InStr(varTemp(lngTemp), OpenFind)
            If PosFind > 0 Then
                TimeFind = CDate(Mid(Replace(varTemp(lngTemp), ";", " "), PosFind + Len(OpenFind) + 1))
                varOutput(lngIndex, 3) = TimeFind
            End If
            PosFind = InStr(varTemp(lngTemp), CloseFind)
            If PosFind > 0 Then
                TimeFind = CDate(Mid(Replace(varTemp(lngTemp), ";", " "), PosFind + Len(CloseFind) + 1))
                varOutput(lngIndex, 2) = TimeFind
            End If
            '*** 
            
            lngTemp = lngTemp + 1
          Loop
          Close #FF
          If Ubound(varTemp) > 3 Then
            If InStr(1, varTemp(Ubound(varTemp) - 3), ";") > 0 Then
              varValue = Split(varTemp(Ubound(varTemp) - 3), ";")
              If Ubound(varValue) > 3 Then
                varOutput(lngIndex, 4) = varValue(4)
              End If
            End If
          End If
        Next
      End If
    End With
  
    Range("A2").Resize(Ubound(varOutput, 1), 4) = varOutput
  
    Set objFileSearch = Nothing
  End Sub
Spalte auch TT.MM.JJJJ hh:mm:ss formatieren
LG UweD
Anzeige
AW: Daten aus Textdatei
25.04.2018 18:11:02
Günther
Moin,
da ich aus Gründen der Datenhygiene keine VBA-behafteten Files herunter lade, kann ich nur deine Beschreibung für eine Antwort nutzen. Auf der Basis der *.txt (ist übrigens vom Typ her eine *.csv) habe ich mal eine Lösung ohne VBA mit Power Query erstellt. Vielleicht ist es ja das, was du meinst ...
https://www.herber.de/bbs/user/121289.xlsx
Gruß
Günther

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige