Dateien in Unterordner zählen und in Text schreiben wenn eine oder mehrere fehlen.

  • Hallo,

    wie die Überschrift sagt, brauch ich Hilfe um in Unterordner die Dateien zu zählen. Folgendes möchte ich für die Firma machen. Die Rechnungen (PDF) sollen alle in Unterordner verschoben werden. 621000.pdf bis 621999.pdf und dann die nächste Reihe 622000 bis 622999.pdf und immer so weiter. Das ist auch kein Problem mehr.

    Jetzt habe ich nach Auflistung des Arrays zwei Ordner ( 621 und 622 ). Ich möchte jetzt gerne das die PDF Dateien die in den Ordner liegen, gezählt werden und mir in eine Textdatei oder in ein anderes Array aufgelistet wird welche fehlen ( 621123.pdf, danach 621125.pdf also fehlt 621124.pdf).

    Super wäre natürlich noch wenn ein Ordner 1000 Dateien enthält ohne das eine fehlt, den Ordner um zu benennen in 621____vollständig.

    ?(

  • wie die Überschrift sagt, brauch ich Hilfe um in Unterordner die Dateien zu zählen.

    schau dir dafür mal die UDF sammlung an, die ich hoch geladen habe ;) da gibt es eine UDF, ich glaub ich habe die "_FileFindAll()" oder so genannt, die alle datein in einem Ordner in einem array speicher und zurück gibt ;)
    damit liest du beide ordner ein und vergleichst dann anschließen die array mit for schleifen ;)

  • Meinst du sowas? ;)


    1
    _FileListToArray()

    aber

    [autoit]

    _filelisttoarray()

    [/autoit]

    gibt doch nur die datein in dem "hauptordner" wieder oder etwa nicht? 8| ich dachte @congomonster bezieht sich hierbei auch auf unterordner, aus denen die dateien auch wieder ausgelesen werden müssen ;) oder wie soll ich

    brauch ich Hilfe um in Unterordner die Dateien zu zählen

    verstehen? 8|

  • Richtig es sollen dann die Unterordner bzw. die PDF Dateien in dem Array angezeigt werden.

  • Hallo...noch wer da :)

    ich bin jetzt soweit das ich alle Dateien die ich verschoben habe in eine Text datei bekomme. ich hab es bestimmt zu schwierig gemacht. Aber das ist erstmal egal. Ich habe jetzt eine txt Datei wo alle PDF Dateien drin stehen mit Pfad. Ich kann die txt Datei ja bestimmt in ein array einlesen, aber wie bekomme ich die Dateien jetzt gezählt bzw. wie kriege ich das hin das er mir auflistet welche fehlen. Suchen nach Dateien zählen bringt nichts. Ich will ja wissen wenn eine oder mehrere fehelen. :( :( :(

  • Hey ich habe diesen Thread gerade gesehen und mir war zufälliger weise langweilig... :D
    Hier also mal mein Vorschlag wie du das lösen könntest: :whistling:

    Spoiler anzeigen
    [autoit]

    Dim $SourceFolder = @UserProfileDir&'\', $DestinationFolder = @ScriptDir&'\Dummy\', $SearchHandle, $FileName, $FilePath, $FolderName, $FolderList[1] = [0], $Start, $End

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

    ; Dateien in Unterverzeichnisse verschieben:
    $SearchHandle = FileFindFirstFile($SourceFolder&'*.pdf')
    While 1
    $FileName = FileFindNextFile($SearchHandle)
    If @error Then ExitLoop
    $FilePath = $SourceFolder&$FileName
    $FolderName = StringLeft($FileName,3)
    If Not FileExists($DestinationFolder&$FolderName&'\') Then DirCreate(FileExists($DestinationFolder&$FolderName&'\'))
    FileMove($FilePath,$DestinationFolder&$FolderName&'\',1)
    WEnd

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

    ; Unterverzeichniss-Liste erstellen:
    $SearchHandle = FileFindFirstFile($DestinationFolder&'*')
    While 1
    $FileName = FileFindNextFile($SearchHandle)
    If @error Then
    ExitLoop
    ElseIf @extended Then
    $FolderList[0] += 1
    ReDim $FolderList[$FolderList[0]+1]
    $FolderList[$FolderList[0]] = $FileName
    EndIf
    WEnd

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

    ; Verzeichnisse durchgehen und Log über fehlende Dateien erstellen:
    For $i = 1 To $FolderList[0]
    If FileExists($DestinationFolder&$FolderList[$i]&'\'&'Missing_Files.txt') Then FileDelete($DestinationFolder&$FolderList[$i]&'\'&'Missing_Files.txt')
    $Start = Number($FolderList[$i])*1000
    $End = $Start + 999
    For $f = $Start To $End
    If Not FileExists($DestinationFolder&$FolderList[$i]&'\'&$f&'.pdf') Then FileWrite($DestinationFolder&$FolderList[$i]&'\'&'Missing_Files.txt',$f&@CRLF)
    Next
    Next

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

    MsgBox(64,@ScriptName,'Das Verschieben der Dateien wurde erfolgreich abgeschlossen und das Script wird nun beendet!')
    Exit

    [/autoit]


    Leider hatte ich keine geeigneten Testdateien zu Hand um das Script zu testen...

    LG
    Christoph :)

  • Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    ; @ScriptDir mit dem Pfades zu durchsuchenden Ordners ersetzen
    $result = _GetFilesFolder_Rekursiv(@ScriptDir, 'pdf', 0)
    _ArrayDisplay($result)

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit]


    je mehr Ordner es durchsuchen muss, desto länger wird es

  • Suchen nach Dateien zählen bringt nichts. Ich will ja wissen wenn eine oder mehrere fehelen.


    Dann suchst du so etwas?

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <file.au3>

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

    Global $aMissing[1]
    Global $aMoved = _FileListToArray(@ScriptDir,"*.pdf") ;Verzeichnis anpassen

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

    #region ;diesen Block löschen nur für mich zum testen
    Global $aMoved[100]
    for $i = 1 to 99
    $aMoved[$i] = StringFormat(@ScriptDir & "\Test30%04s" & ".pdf",$i)
    Next
    for $i = 99 to 1 Step -1
    if Random(1,5,1) = 1 Then _ArrayDelete($aMoved,$i)
    Next
    #endregion

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

    _ArrayDelete($aMoved,0)
    _ArraySort($aMoved)
    _ArrayDisplay($aMoved)

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

    $iFirst = _GetDocNo($aMoved[0])
    $iLast = _GetDocNo($aMoved[UBound($aMoved)-1])

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

    ConsoleWrite("erstes Dokument: " & $iFirst & "letztes Dokument " & @TAB & $iLast &@CRLF)

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

    for $i = $iFirst to $iLast
    if _ArraySearch($aMoved,$i,0,0,0,1) = -1 Then _ArrayAdd($aMissing,$i)
    Next
    $aMissing[0] = UBound($aMissing) -1
    _ArrayDisplay($aMissing,"Fehlende Nr.'n")

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

    Func _GetDocNo($sNo) ; ;das Ergebnis dieser Func sollte über RegEx ermittelt werden ansonsten anpassen
    Local $iNo = "", $char
    $sNo = StringReplace($sNo,".pdf","") ; .pdf abschneiten
    $sNo = StringReplace($sNo,@ScriptDir & "\Test","") ;Anfang wegschneiten <========= anpassen
    ConsoleWrite($sNo & @CRLF) ;jetzt haben wir eine Zahl
    Return Int($sNo)
    EndFunc

    [/autoit]

    Leider kann ich kein RegEx deshalb musst du die Func _GetDocNo anpassen bzw. vielleicht ist ja einer der RegEx-Mächtigen so nett und filtert die Nr. aus dem Dateinamen heraus.

    mfg autoBert

  • Hi,

    super Dankeschön. Ich werde mir das am WE alles mal anschauen. Ich gebe dann auf jeden Fall eine Meldung zurück ob was oder wie funktioniert hat. Wenn ich's den verstehe. :)

  • Ich hatte heute Zeit zum basteln. Leider verstehe ich nicht alles. Bin ja noch Anfänger. Ich habe mir die Arbeit jetzt in 3 Schritte unterteilt. Dann kann man auch einzelne Schritte ausführen. Das erste Skript schiebt die Rechnungen in die Ordner.

    Rechnung_sortieren:

    [autoit]

    ; Skript zum verschieben von Rechnungen
    #include <File.au3>
    #include <Array.au3>

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

    Global $Pfad = "\\V120\d\Rechnungen" ;Pfad wo die Rechnungen liegen

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

    $Rechnungen_Array = _FileListToArray($Pfad, "*.pdf") ; Hier werden die Pdf Dateien zu einem Array (Liste) geordnet.
    If @error = 4 Then
    ;MsgBox(0, "", "keine Rechnungen zum sortieren gefunden!")
    Exit ; das Skript wird hier beendet wenn keine Rechnungen im Ordner liegen
    EndIf

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

    _ArraySort($Rechnungen_Array, 0, 1) ; Hier werden die Pdf Dateien sortiert.
    ;_ArrayDisplay($Rechnungen_Array, "Rechnungen") ; Zeigt eine Liste mit den Pdf Dateien.

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

    $Anzahl_der_Rechnungen = $Rechnungen_Array[0]

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

    ConsoleWrite("Anzahl der Rechnungen : " & $Anzahl_der_Rechnungen & @CRLF) ; Anzahl der Rechnungen in das Konsolenfenster übergeben.
    Global $aktuelle_Rechnungsnummer
    Global $letzte_Rechnungsnummer = 0

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

    For $i = 1 To $Anzahl_der_Rechnungen
    ;\\V120\d\Rechnungen \ 671900.pdf
    $Quelldatei = $Pfad & "\" & $Rechnungen_Array[$i]
    $Unterordner = StringTrimRight($Rechnungen_Array[$i], 7) ; hier wird das Kürzel pdf weggeschnitten
    $Zieldatei = $Pfad & "\" & $Unterordner & "\" & $Rechnungen_Array[$i]
    ConsoleWrite("es wird verschoben: " & $Quelldatei & " nach " & $Zieldatei & @CRLF)
    FileMove($Quelldatei, $Zieldatei, 8) ; verschiebt alle Rechnungen in die passenden Unterordner
    Next

    [/autoit]

    Das zweite Skript zeigt mir alle PDF Dateien Rekursiv an. Hatte ich hier im Forum gefunden. Ich habe mir das dann so umgebastelt das mir eine Textdatei ausgegeben wird.

    PDF_Rekursiv_auflisten

    [autoit]

    ; Skript zum auflisten der verschobenen Rechnungen
    #include <File.au3>
    #include <Array.au3>

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

    Global $file = FileOpen("\\V120\d\Rechnungen\alle_PDF_Rechnungen.txt", 10)

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

    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    FileClose($file)

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

    Global $alle_PDF_Rechnungen = "\\V120\d\Rechnungen\alle_PDF_Rechnungen.txt"

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

    $ret = _GetFilesFolder_Rekursiv('\\V120\d\Rechnungen', 'pdf',0,1)
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Rekursiv alle PDF-Dateien')
    ;_FileWriteFromArray($fehlende_Rechnungen, $ret)
    Else
    ConsoleWrite($ret & @CRLF)
    FileWrite($alle_PDF_Rechnungen, $ret)
    EndIf

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit]

    Im dritten Skript lasse ich mir die Dateien jetzt wieder einlesen. Jetzt werden mir in einem Array alle PDF Dateien angezeigt. Wie kriege ich jetzt die fehlenden angezeigt ? Ich habe daran gedacht ArraySearch zu benutzen. Wäre das den richtig ? Das ist jetzt erstmal der letzte Punkt an dem ich hänge.

    Liste aller PDF Rechnungen

    [autoit]

    ; Skript zum auflisten der fehlenden Rechnungen

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

    #include <File.au3>
    #include <Array.au3>

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

    Global $Pfad = "\\V120\d\Rechnungen\alle_PDF_Rechnungen.txt"

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

    Local $aRecords
    If Not _FileReadToArray($Pfad, $aRecords) Then
    ;MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 To $aRecords[0]
    ;MsgBox(0, 'Record:' & $x, $aRecords[$x])
    _ArrayDisplay($aRecords, "Rechnungen")
    ;ConsoleWrite($aRecords & @CRLF)
    Exit
    Next

    [/autoit]

    ?( ?( ?(

  • Ich habe daran gedacht ArraySearch zu benutzen. Wäre das den richtig ? Das ist jetzt erstmal der letzte Punkt an dem ich hänge.


    Lass einmal mein Skript aus [ offen ] Dateien in Unterordner zählen und in Text schreiben wenn eine oder mehrere fehlen. unverädnert laufen, daran siehst du dass ArraySearch eine gute Wahl ist. Ob sich das Schema 1:1 übertragen lässt wage ich zu bezweifeln, da ich nur von einem Ordner ausgegangen bin. Falls du beim übertragen durch die Unterordner Probleme haben solltest, dann stelle die gezipte Textdatei hier im Forum ein. Ich schaue es mir dann an. Sorry bin zu beguem Testdaten zu erzeugen.

    mfg autoBert

  • Mit meinem angepassten Pfad und dem Block den ich löschen soll sieht es wohl so aus:

    [autoit]

    #include <array.au3>
    #include <file.au3>

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

    Global $Pfad = "\\V120\d\Rechnungen" ;Pfad wo die Rechnungen liegen
    Global $aMissing[1]
    Global $aMoved = _FileListToArray($Pfad,"*.pdf") ;Verzeichnis anpassen

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

    _ArrayDelete($aMoved,0)
    _ArraySort($aMoved)
    _ArrayDisplay($aMoved)

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

    $iFirst = _GetDocNo($aMoved[0])
    $iLast = _GetDocNo($aMoved[UBound($aMoved)-1])

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

    ConsoleWrite("erstes Dokument: " & $iFirst & "letztes Dokument " & @TAB & $iLast &@CRLF)

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

    for $i = $iFirst to $iLast
    if _ArraySearch($aMoved,$i,0,0,0,1) = -1 Then _ArrayAdd($aMissing,$i)
    Next
    $aMissing[0] = UBound($aMissing) -1
    _ArrayDisplay($aMissing,"Fehlende Nr.'n")

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

    Func _GetDocNo($sNo) ; ;das Ergebnis dieser Func sollte über RegEx ermittelt werden ansonsten anpassen
    Local $iNo = "", $char
    $sNo = StringReplace($sNo,".pdf","") ; .pdf abschneiten
    $sNo = StringReplace($sNo,@ScriptDir & "\Test","") ;Anfang wegschneiten <========= anpassen
    ConsoleWrite($sNo & @CRLF) ;jetzt haben wir eine Zahl
    Return Int($sNo)
    EndFunc

    [/autoit]

    Dann kommt aber die Fehlermeldung:
    ==> Subscript used with non-Array variable.:
    $iFirst = _GetDocNo($aMoved[1])
    $iFirst = _GetDocNo($aMoved^ ERROR

  • Lass einmal mein Skript aus [ offen ] Dateien in Unterordner zählen und in Text schreiben wenn eine oder mehrere fehlen. unverädnert laufen

    sollte unverändert heissen.
    Um es mit denen Daten zu testen musst du auch

    die Func _GetDocNo anpassen bzw. vielleicht ist ja einer der RegEx-Mächtigen so nett und filtert die Nr. aus dem Dateinamen heraus.

    mfg autoBert

  • Basierend auf autoberts Konzept hier mal mein Ansatz:

    Spoiler anzeigen
    [autoit]

    #include <Math.au3>

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

    Global $d_Max = 0, $s_Num
    Global $dic_Nums = ObjCreate("Scripting.Dictionary") ; Datenstruktur für die Nummernliste

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

    Global Const $Pfad = "\\V120\d\Rechnungen" ;Pfad wo die Rechnungen liegen
    Global Const $s_Pattern = "(?m)(\d{3})\.pdf$" ; Regulärer Ausdruck mit dem die Nummer aus dem Dateinamen gefiltert wird

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

    #region Vorhandene Nummern und maximale Nummer ermitteln
    Global $h_FFFF = FileFindFirstFile($Pfad & "\*")
    If $h_FFFF = -1 Then Fehler("Keine Dateien im angegebenen Ordner gefunden")

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

    Do
    $s_FileName = FileFindNextFile($h_FFFF)
    If @error Then ExitLoop ; wenn Ende der Suche erreicht
    If @extended Then ContinueLoop ; wenn Fund ein Ordner ist

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

    $s_Num = _GetDocNo($s_FileName, $s_Pattern) ; Nummer aus Dateiname ziehen
    If $s_Num = -1 Then ContinueLoop
    $d_Max = _Max($s_Num, $d_Max)
    $dic_Nums($s_Num) = 0 ; Ermittelte Nummer der Nummernliste hinzufügen
    Until False
    FileClose($h_FFFF)
    #endregion

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

    #region Fehlende Zahlen der Reihe ermitteln
    ; Startwert anpassen
    For $i = 0 To $d_Max
    If Not $dic_Nums.Exists($i) Then
    MsgBox(0,"", "Fehlende Ziffer: " & $i)
    EndIf
    Next
    #endregion

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

    ; Funktion welche aus einem String eine Nummer anhand eines regulären Ausdrucks extrahiert
    Func _GetDocNo(Const $s_FileName, Const $s_Pattern, Const $FalseReturn = -1)
    Local Const $a_Ret = StringRegExp($s_FileName, $s_Pattern, 3)
    If @error Then Return $FalseReturn
    Return Number($a_Ret[0])
    EndFunc ;==>_GetDocNo

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

    Func Fehler(Const $s_Text)
    MsgBox(48, "Fehler", $s_Text)
    Exit
    EndFunc ;==>Fehler

    [/autoit]

    vielleicht ist ja einer der RegEx-Mächtigen so nett und filtert die Nr. aus dem Dateinamen heraus.

    Hast du dich noch nich mit regulären Ausdrücken auseinander gesetzt?
    Da staune ich doch ein bisschen - wenn das einer schnell kapieren wird dann du.
    Kein Hexenwerk - einfach die Tutorials (z.B. von Seubo) lesen und anwenden.

  • Hast du dich noch nich mit regulären Ausdrücken auseinander gesetzt?
    Da staune ich doch ein bisschen - wenn das einer schnell kapieren wird dann du.


    Danke für die hohe Meinung, aber ich bin in einem Alter angekommen indem neu gelerntes schneller vergessen ist als man es in den Kopf hinein bekommen kann. Zudem bin ich bisher ohne ausgekommen (mit deutlich mehr Programmzeilen als mit RegEx, dafür aber sicher schneller als wenn ich Stundenlang den Tippfehler in einem Pattern suche (Augen sind leider auch nicht mehr die besten))

    mfg autoBert

  • Hallo,

    ich bin immer noch da. Leider konnte ich mich seit einer Weile nicht mit dem Problem beschäftigen. Das Beispiel von AspirinJunkie hat mir auf jeden fall geholfen. Leider Funktioniert das nicht mit mehreren Ordnern. Er zeigt auch immer nur die letzten Zahlen an. Es fehlen z.B. die Datei Nr.7, dann wird nur die 7 angezeigt. Es handelt sich hierbei beim Datei Namen aber um eine 6 Stellige Zahl. Na ja ich Versuch mal das mit den Regulären Ausdrücken besser hin zu bekommen........

  • So, ich denke ich bin einen Schritt weiter. Ich bin jetzt an dem Punkt, wo ich alle verschobenen PDF Dateien in einem schönen Array habe. Ich muss es jetzt noch hin bekommen, das ich den Ansatz von AspirinJunkie übertragen bekomme, für mein Array. Wenn es jetzt noch funktioniert das er mir die fehlenden rausfiltert, spring ich im Dreieck :D :D :D :D