#cs MUSTER INI-Datei [recent_num] max=5 aktuell=0 [recent_file] #ce ;================================================================================================== ; Function Name: _RecentFiles(ByRef $INI, ByRef $ARRAY, $FILE, ByRef $CURRCOUNT, ByRef $MAXCOUNT [, $ASC=1]) ; Description:: Verwalten der zuletzt genutzten Dateien in einer INI ; wahlweise an Pos. 0 die älteste (Standard) oder neueste Datei ; Parameter(s): $INI Pfad der INI-Datei ; $ARRAY Das 2D-Array mit den Dateien, Rückgabe von INIReadSection ; Falls noch nicht existent, muß die übergebene Variable auf jeden Fall ; ein Array sein! ; $FILE aktuelle Datei/Pfad, zum Hinterlegen in der INI ; $CURRCOUNT aktuelle Anzahl hinterlegter Dateien/Pfade ; $MAXCOUNT maximal zulässige Anzahl zu hinterlegender Dateien/Pfade ; $ASC aktuelle Datei wird an erste Stelle (Pos 0 im Array) oder an ; letzte Stelle (Ubound-1 im Array)-Standard geschrieben ; Requirement(s): INI mit Sektionen ; [recent_num] und Schlüsseln "maximum, aktuell" ; (Variablen zum Einlesen der Werte und Übergeben an die Funktion) ; [recent_file] (Schlüsselwort ist für alle Einträge "file") ; Wenn die INI mit INIReadSection eingelesen wird, löscht die Funktion Zeile 0 (Zähler) ; UDF _Array2DDelete() ; #include ; Return Value(s): Keine ; Author(s): BugFix (bugfix@autoit.de) ;================================================================================================== Func _RecentFiles(ByRef $INI, ByRef $ARRAY, $FILE, ByRef $CURRCOUNT, ByRef $MAXCOUNT, $ASC=1) Local $index If UBound($ARRAY, 2) Then If IsNumber($ARRAY[0][0]) Then _Array2DDelete($ARRAY, 0) EndIf If $ASC = 1 Then If UBound($ARRAY, 2) Then $index = _ArraySearch($ARRAY, $FILE, 0, 0, 0, 0, 1, 1) If $index = -1 Then If $CURRCOUNT = $MAXCOUNT -1 Then _Array2DDelete($ARRAY, 0) Else $CURRCOUNT += 1 IniWrite($INI, 'recent_num', 'aktuell', $CURRCOUNT) EndIf Else _Array2DDelete($ARRAY, $index) EndIf ReDim $ARRAY[UBound($ARRAY)+1][2] Else ReDim $ARRAY[1][2] EndIf $ARRAY[UBound($ARRAY)-1][0] = 'file' $ARRAY[UBound($ARRAY)-1][1] = $FILE Else If UBound($ARRAY, 2) Then $index = _ArraySearch($ARRAY, $FILE, 0, 0, 0, 0, 1, 1) If $index = -1 Then If $CURRCOUNT < $MAXCOUNT -1 Then $CURRCOUNT += 1 IniWrite($INI, 'recent_num', 'aktuell', $CURRCOUNT) ReDim $ARRAY[UBound($ARRAY)+1][2] EndIf Else _Array2DDelete($ARRAY, $index) ReDim $ARRAY[UBound($ARRAY)+1][2] EndIf For $i = UBound($ARRAY)-1 To 1 Step -1 $ARRAY[$i][0] = 'file' $ARRAY[$i][1] = $ARRAY[$i-1][1] Next $ARRAY[0][1] = $FILE Else ReDim $ARRAY[1][2] $ARRAY[UBound($ARRAY)-1][0] = 'file' $ARRAY[UBound($ARRAY)-1][1] = $FILE EndIf EndIf IniWriteSection($INI, 'recent_file', $ARRAY, 0) EndFunc ;==>_RecentFiles Func _Array2DDelete(ByRef $ARRAY, $iDEL) Local $i, $k, $l If ( Not IsArray($ARRAY) ) Then SetError(1) Return 0 EndIf If ( $iDEL < 0 ) Or ( $iDEL > UBound($ARRAY)-1 ) Then SetError(2) Return 0 EndIf Local $UBound2nd = UBound($ARRAY,2) If @error = 2 Then Local $arTmp[UBound($ARRAY)-1] $k = 0 For $i = 0 To UBound($ARRAY)-1 If $i <> $iDEL Then $arTmp[$k] = $ARRAY[$i] $k += 1 EndIf Next Else Local $arTmp[UBound($ARRAY)-1][$UBound2nd] $k = 0 For $i = 0 To UBound($ARRAY)-1 If $i <> $iDEL Then For $l = 0 To $UBound2nd-1 $arTmp[$k][$l] = $ARRAY[$i][$l] Next $k += 1 EndIf Next EndIf $ARRAY = $arTmp Return -1 EndFunc ;==>_Array2DDelete