Page 1 sur 1

[resolu] Nom de fichiers et prise en compte de l'ordre.

Publié : sam. 05/mars/2011 23:09
par Ar-S
Je suis confronté à un problème bien informatique.

J'ai un dossier TEST contenant 4 fichiers image.
1.jpg, 2.jpg, 11.jpg et 25.jpg

Dans l'explorer en affichage "details" il apparaissent bien dans l'ordre :
1.jpg, 2.jpg, 11.jpg et 25.jpg

J'ai ma procédure pour compter et lister les fichiers d'un répertoire, le soucis et que lui va compter ça à sa façon et du coup si je décide de renommer les images avec un

je me retrouverai avec des fichiers dans le désordre car l'ordi considèrera que 111111 est positionné avec 2.
1.jpg, 11.jpg, 2.jpg et 25.jpg

Code : Tout sélectionner

Enumeration
  #IMG : #AFF
EndEnumeration

Global DernierDossier$,NouveauRep$,car$,fin,Repertoire$
Global NBRfich.l
Global NewList LesFichiers.s()

Procedure CompteFichiers(dir)
  Repertoire$=EventDropFiles()
  Debug "Repertoire droppé : "+Repertoire$
  NBRfich=0
  ClearList(LesFichiers())
  If ExamineDirectory(dir, EventDropFiles(), "*.jpg") 
    While NextDirectoryEntry(dir)
      If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
        fichier$=DirectoryEntryName(dir)
        If LCase(GetExtensionPart(fichier$))="jpg" Or LCase(GetExtensionPart(fichier$))="jpeg" ; histoire d'être sur de chopper toutes les images
          AddElement(LesFichiers())
          LesFichiers()= Repertoire$+"\"+fichier$
          Debug LesFichiers()+"       C'est le fichier num  "+Str(NBRfich+1)
          NBRfich+1
        EndIf 
      EndIf  
    Wend
    FinishDirectory(dir)
  EndIf
  ProcedureReturn NBRfich
EndProcedure

;--------------------------------
;- LE PROGRAMME
;--------------------------------

OpenWindow(0, 583, 629, 319, 23, "LDVM Redim 1024/768 relatif"+v$, #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
StickyWindow(0,1)
StringGadget(#AFF, 0, 0, 315, 20, "Glissez/déposez le dossier image ici",#PB_String_ReadOnly|#ES_CENTER)
EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)

 
  ;{- Boucle
Repeat
  Select WaitWindowEvent()
      
    Case #PB_Event_WindowDrop 
       
      CompteFichiers(NumDir)
      
      Debug "il y a "+Str(NBRfich)+" images jpg dans ce dossier"
      Debug "...."

      If NBRfich>0 ; s'il y a des images jpg ou jpeg
        ;traitement()
        NBRfich=0
        ClearList(LesFichiers())
        
      Else
        SetGadgetText(#AFF,"Il ni a pas d'images valides dans ce répertoire")
      EndIf
      
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
ForEver
Y'a t il moyen de placer le nom des images dans le bon ordre ?

Re: Nom de fichiers et prise en compte de l'ordre.

Publié : sam. 05/mars/2011 23:50
par Ar-S
j'ai ajouté

Code : Tout sélectionner

SortList(LesFichiers(),#PB_Sort_Ascending)
      ResetList(LesFichiers())
      ForEach LesFichiers()
        Debug "Ordre Asc : "+LesFichiers()
Next
ça ne change rien au problème, 1 11 2 25 est pour lui l'ordre logique.

Re: Nom de fichiers et prise en compte de l'ordre.

Publié : sam. 05/mars/2011 23:56
par Ar-S
Allons les gars un peu de sérieux ! :x

Re: Nom de fichiers et prise en compte de l'ordre.

Publié : dim. 06/mars/2011 0:01
par falsam
J'ai fait quelques modifications.

Code : Tout sélectionner

Enumeration
  #IMG : #AFF
EndEnumeration

Global DernierDossier$,NouveauRep$,car$,fin,Repertoire$
Global NBRfich.l
Global Dim LesFichiers.s(1)

Global Lenmax.i ;Longueur maxi d'un nom de fichier

Procedure CompteFichiers(dir)
  Repertoire$=EventDropFiles()
  Debug "Repertoire droppé : "+Repertoire$
  NBRfich=0
  If ExamineDirectory(dir, EventDropFiles(), "*.jpg") 
    While NextDirectoryEntry(dir)
      If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
        fichier$=DirectoryEntryName(dir)        
        If LCase(GetExtensionPart(fichier$))="jpg" Or LCase(GetExtensionPart(fichier$))="jpeg" ; histoire d'être sur de chopper toutes les images
          
          If Len(Repertoire$+"\"+fichier$)>LenMax
            LenMax=Len(Repertoire$+"\"+fichier$)
          EndIf
          
          LesFichiers(NBRfich)= Repertoire$+"\"+fichier$
         ;Debug LesFichiers()+"       C'est le fichier num  "+Str(NBRfich+1)
         NBRfich+1
         ReDim  Lesfichiers(NBRfich)
        EndIf 
      EndIf  
    Wend
    FinishDirectory(dir)
    Debug Lenmax
    ;On connait la longueur maximum des noms de fichiers (LenMax)
    ;On complete à gauche chaque nom de fichier par des blancs
    For i=0 To NBRfich
      LesFichiers(i)=RSet(LesFichiers(i),Lenmax," ")
    Next
    
    ;Tri du tableau
    SortArray(LesFichiers(), #PB_Sort_Ascending)
    
    ;Resultat
    For i=0 To NBRfich
      Debug Lesfichiers(i)+"       C'est le fichier num  "+Str(i)
    Next
    
  EndIf
  ProcedureReturn NBRfich
EndProcedure

;--------------------------------
;- LE PROGRAMME
;--------------------------------
OpenWindow(0, 583, 629, 319, 23, "LDVM Redim 1024/768 relatif"+v$, #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
StickyWindow(0,1)
StringGadget(#AFF, 0, 0, 315, 20, "Glissez/déposez le dossier image ici",#PB_String_ReadOnly|#ES_CENTER)
EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)

  ;{- Boucle
Repeat
  Select WaitWindowEvent()
      
    Case #PB_Event_WindowDrop 
       
      CompteFichiers(NumDir)
      
      Debug "il y a "+Str(NBRfich)+" images jpg dans ce dossier"
      Debug "...."

      If NBRfich>0 ; s'il y a des images jpg ou jpeg
        ;traitement()
        NBRfich=0
      Else
        SetGadgetText(#AFF,"Il ni a pas d'images valides dans ce répertoire")
      EndIf
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
ForEver

Re: Nom de fichiers et prise en compte de l'ordre.

Publié : dim. 06/mars/2011 0:13
par Ar-S
Merci, effectivement ça marche comme ça, par contre les noms contenus dans la liste ne sont plus les "vrais" noms des fichiers si ?
Du coup si ensuite je veux faire un traitement des fichiers d'après la liste, ça va foirer non ?

(vu que "C:\1.jpg" va devenir " C:\1.jpg")

Re: Nom de fichiers et prise en compte de l'ordre.

Publié : dim. 06/mars/2011 0:16
par falsam
Utilise LTrim pour retirer les blancs en début de nom au moment ou tu dois traiter le fichier.

Re: Nom de fichiers et prise en compte de l'ordre.

Publié : dim. 06/mars/2011 0:20
par Ar-S
Ah ba évidement... merci :wink:

Code : Tout sélectionner

For i=0 To NBRfich-1
    Debug LTrim(LesFichiers(i))+"       C'est le fichier num  "+Str(i+1)
Next
Pour un affichage plus clean