Bonjour,
Depuis la méthode ci-dessous, j'essai d'extraire une liste d'extensions contenues dans un dossier à l'aide d'un TStringList (ExtCompare).
Les deux boucles For, servent dont à filtrer les doublons et contruire le une seconde TStringList (ExtLst), sans les doublons à l'aide de la condition If Then.
L'algo semble correcte, mais au résultat, ça retourne la liste complète.
Merci pour vos conseils.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 function getListExtFiles(dir: string): string; var ExtLst, ExtCompare : TStringList; SFilename: TSearchRec; ExtResult, separator: string; i, j, k: integer; begin ExtLst := TStringList.Create; ExtCompare := TStringList.Create; // On ajoute une valeur pour permettre de rentrer dans la boucle "for i :=" ExtLst.Add('null'); dir := IncludeTrailingPathDelimiter(dir); // Recherche de la première entrée du répertoire if FindFirst(dir+'*.*',faAnyFile,SFilename)=0 then begin repeat if (SFilename.Name<>'.')And(SFilename.Name<>'..') then // contruction the string list if ((SFilename.Attr and faDirectory)=0) then ExtCompare.Add(UpperCase(ExtractFileExt(SFilename.FindData.cFileName))); { Il faut ensuite rechercher l'entrée suivante } until FindNext(SFilename)<>0; // --- On Compare les 2 stringlist pour extraire les extensions sans les doublons --- for i := 0 to ExtCompare.Count-1 do begin for j := 0 to ExtLst.Count-1 do begin if ExtCompare.Strings[i]<>ExtLst.Strings[j] then begin ExtLst.Add(ExtCompare.Strings[i]); end; end; end; for k := 1 to ExtLst.Count-1 do // k = 0 => Null begin // Concaténe les extensions dans une chaine ExtResult := ExtResult + separator + ExtLst.Strings[k]; if (ExtLst.Count>2) then separator := ' | ' else separator := ''; end; // -------------------------------------------------------------- { Libére les ressources de la recherche } FindClose(SFilename); end; // Libère la mémoire allouée ExtLst.Free; ExtCompare.Free; // Retourne les extensions différentes sans les doublons result := ExtResult; end;
Partager