Neuste Datei finden mit dem anfang aopl*.*

  • Hallo AutoIT,

    Wiedermal habe ich einen frage an euch. Ich habe zwar schon viele möglichkeiten gefunden um die Neuste Datei in einem Verzeichnes zu finden nur bei mir ist da noch ein Problemaufgetaucht.

    Mein Script soll aus die zwei neusten Berichte von einem System finden und bearbeiten.

    Nun gibtb das System immer 2 Dateien aus 1. "aopl_DATUM.csv" 2. "packReport_DATUM.csv"

    Ich möchte das mein Script mir jeweils die neuste der beiden Dateien raussucht.

    Mein altes Script sah so aus:

    [autoit]

    #include <Array.au3>
    #include <File.au3>
    $aFilelist = _FileListToArray(@DesktopDir & "\test\")
    Dim $Datum[$Liste[0]+1]
    For $i = 1 To $Liste[0]
    $Datum[$i] = FileGetTime(@DesktopDir & "\test\" & $Liste[$i], 0, 1)
    Next
    MsgBox(0, "Test", $Liste[_ArrayMaxIndex($Datum, 1)])

    [/autoit]


    Nur kann dieses Script immer nur die neuste Datei ausgeben und das ist immer nur der packReport_DATUM.csv da er nach der aopl bearbneitet wird.

    Gruß Raumen837

    • Offizieller Beitrag

    Ich glaub du meinst sowas? Kannst eine Suchmaske bei FileListToArray angeben ;)

    [autoit]

    #include <Array.au3>
    #include <File.au3>
    $aFilelist = _FileListToArray(@DesktopDir & "\test\","apol*.*")
    Dim $Datum[$Liste[0]+1]
    For $i = 1 To $Liste[0]
    $Datum[$i] = FileGetTime(@DesktopDir & "\test\" & $Liste[$i], 0, 1)
    Next
    MsgBox(0, "Test", $Liste[_ArrayMaxIndex($Datum, 1)])

    [/autoit]

    Gruß.
    Spider

  • Das bedeutet dass $Liste zum Zeitpunkt des Aufrufes kein Array ist es aber solches aufgerufen wird (die eckigen Klammern nach der Variable).
    Das scheint auch logisch zu sein da bis zu dem Zeitpunkt noch gar keine Variable $Liste erstellt wurde.
    Stattdessen sollte die Variable sicherlich $aFileListe heißen da dies ja das Array ist welches von FileListToArray zurückgegeben wird.
    Dennoch sollte man trotzdem das Ergbnis von FileListToArray daraufhin prüfen ob wirklich etwas gefunden wurde da es sonst zu einem ähnlichen Fehler kommen wird.
    Dazu einfach nach dem Aufruf von FileListToArray prüfen ob @error ungleich 0 ist.

    Edit: Mein Alternativvorschlag ohne Zwischenarray:

    Neueste Datei in einem Ordner finden
    [autoit]

    Global Const $s_Ordner = @DesktopDir & "\test\"
    Global Const $s_Pattern = "apol*.*"

    [/autoit] [autoit][/autoit] [autoit]

    Global $s_MaxDate = "", $s_MaxFileName, $s_File, $s_Time, $h_Suche

    [/autoit] [autoit][/autoit] [autoit]

    $h_Suche = FileFindFirstFile($s_Ordner & $s_Pattern)
    If $h_Suche = -1 Then Exit MsgBox(48,"Fehler", "Keine Dateien gefunden!")

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $s_File = FileFindNextFile($h_Suche)
    If @error Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    $s_Time = FileGetTime($s_Ordner & $s_File, 0,1)

    [/autoit] [autoit][/autoit] [autoit]

    If $s_Time > $s_MaxDate Then
    $s_MaxDate = $s_Time
    $s_MaxFileName = $s_File
    EndIf
    Until 0
    FileClose($h_Suche)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"Neueste Datei", "Neueste Datei: " & $s_MaxFileName)

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (17. Oktober 2012 um 08:47)

  • @AspirinJunkie:

    So habe getestet .... irgendwie bekommgt er es nicht hin die Datenliste in die Array zu schieben.

    Das problem mit den falschen variabeln war nur auf der Website so.

    Aber dein code Funktioniert Danke

  • Dein Aufruf von FileListToArray sieht in Ordnung aus - zumindestens wenn das Verzeichnis und die Daten existieren.
    Das Problem des Fehlers liegt wie gesagt daran dass du die Variable $Liste verwendest welche vorher nie definiert wurde.
    Die Dateien stehen in der Variable namens $aFilelist und nicht in $Liste.

  • Ja ich weis ich hatte das auch in meinem Eigenen Code verbessert aber bekahm trotzdem den Fehler.

    habe nioch eine frage btw.

    Ich möchte das ich in einer If abfrage 2 Inhalte sortiert werden.

    [autoit]

    If $daten = "LHCP*" Then
    AufgabeLHCP()
    EndIf
    If $daten = "SV*" Then
    AufgabeSV()
    EndIf

    [/autoit]

    #

    Es kommt immerwieder durche eine schleife die anfrage. ob der inhalt von daten mit LHCP anfängt oder mit SV nur behauptet er das alle anfragen nichts davon enthalten

    Raumen837