[R] Ouvrir un dossier trié par type

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

[R] Ouvrir un dossier trié par type  

#1

Message par franco »

Bonjour à toutes et à tous.

Je viens de finaliser un script.
En gros, il me récupère mes annonces leboncoin (une annonce par fichier texte) ainsi que les photos de l'objet.

A la fin, j'ouvre donc le dossier concerné, qui regroupe donc les différentes annonces (donc fichiers texte) ainsi que les photos...

=> Tout est en désordre...

C'est pour cela que j'essaye de trouver une méthode pour ouvrir ce dossier mais en triant par type au préalable.


Mais je ne trouve que pour ouvrir un dossier sans faire d'affichage par type.


Y-a-t-il une solution ou un début de piste ?


Merci à tous !
++ ;)
Modifié en dernier par franco le mer. 21 déc. 2016 21:01, modifié 1 fois.
L'entraide, c'est mon dada ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Ouvrir un dossier trié par type

#2

Message par Tlem »

Bonjour franco.
Juste pour mémo : www.autoitscript.fr/forum/viewtopic.php?f=3&t=13537

Je n'interdit rien, mais en tant qu'administrateur du site, je me doit de rappeler ce genre de chose. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Ouvrir un dossier trié par type

#3

Message par franco »

Salut.

Tu comprends donc pourquoi, pour une fois, je ne met aucun script ou bout de script... :D.

Car je me doutais que cela peut être limite vis-à-vis de la politique de l entreprise susnommée.

Et sinon, tant que je te tiens : t'aurais pas une piste ?

Là où je suis, j'ai pas le net, juste une connexion 3G hyper lente CD





@++
L'entraide, c'est mon dada ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Ouvrir un dossier trié par type

#4

Message par Tlem »

Ben, vu que je ne fais pas ce genre de manipulations, non je n'ai pas d'idées. Et puis sans plus de détails c'est impossible de reprendre, mais vu que c'est borderline, on tourne en rond. ^^

Envoyé de mon appareil mobile avec Tapatalk
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Ouvrir un dossier trié par type

#5

Message par mikell »

sans plus de détails c'est impossible de reprendre
C'est bin vrai ça :mrgreen:
Le plus simple serait de faire une gui pseudo-explorateur + listview à icones que tu remplis avec un _FileListToArray
Sinon si tu tiens absolument au vrai explorateur, bin c'est une listview donc gérable en principe avec les fonctions qui vont bien. Accessible chez moi avec un ObjCreate("Shell.Explorer.2") , mais là je peux pas t'aider passke je suis encore sous XP :P :oops:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 143
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Ouvrir un dossier trié par type

#6

Message par A2Energie »

Bonjour,

Ce que je ferais à ta place : c'est créer un fichier .ini (général)
Avec en section les types d'annonces
Et à l'intérieure de chaque section tu y intègre tes liens vers les dossiers.
Ensuite avec un simple inireadsection tu te retrouve avec l'ensemble des annonces de ton type.
Pour trier par exemple par date, tu les indiques en Clefs et te reste juste à faire un _ArraySort() pour les trier dans l'ordre que tu souhaite.

Par exemple :

Fichier ini :
[Automobile]
"c://mon stock/annonce1=2015/05/02"
"c://mon stock/annonce2=2015/05/04"
...

Ton script :
$Section_Automobile = IniReadSection(Monfichierini, "Automobile")
_ArraySort($Section_Automobile, 1, 0, 0, 1)
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Ouvrir un dossier trié par type

#7

Message par franco »

Salut.


Pour le fichier ini : dans mon cas, je voulais faire, sur mon dossier, clic droit > Trier par > Type : mais de façon automatique et invisible. :mrgreen:

Donc, pour moi, pas de fichier ini...Mais ça va m'aider surement pour autre projet (surtout le DL d'application portable et installable). Donc grand merci :)

Certaines personnes, que je remercie également, m'ont parlé de listview et de pseudo explorateur... Et de Windows XP.
Ce qui m'a fait pensé à une chose que j'aimais sous XP : l'arborescence des dossiers.

=> J'ai donc opté pour une treeview. :D

----------------

J'ai d'ailleurs un souci surement tout bête...

En gros, je liste dans une treeview des fichiers textes et des images JPG.

Je vous met le script
#include <EditConstants.au3>

#include <File.au3>
#include <GUIConstantsEx.au3>
#include <TreeViewConstants.au3>
#include <GuiTreeView.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>



Global $GUI1 = GUICreate("Form1", 530, 57, 192, 124, $WS_MINIMIZEBOX)


GUICtrlCreateLabel("Dossier", 7, 7.5, 50, 20)
$iDossier = GUICtrlCreateInput("", 60, 5, 250, 20)
$Parcourir = GUICtrlCreateButton("...", 315, 5, 20, 20)
$OuvDossTV = GUICtrlCreateButton("Afficher son contenu", 345, 5, 120, 20)

$reduire_1 = GUICtrlCreateButton("-", 480, 5, 20, 20)
$Quitter = GUICtrlCreateButton("X", 500, 5, 20, 20)





GUISetState(@SW_SHOW)


While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE, $Quitter
         Exit
      Case $reduire_1
         GUISetState(@SW_MINIMIZE, $GUI1)

      Case $Parcourir
         $Dossier = FileSelectFolder("Choisissez le dossier contenant les annonces / photos « Leboncojn »", @DesktopDir)
         If FileExists($Dossier) Then GUICtrlSetData($iDossier, $Dossier)

      Case $OuvDossTV
         $Dossier = GUICtrlRead($iDossier)
         If FileExists($Dossier) Then _TV($Dossier)
         GUICtrlSetData($iDossier, "")

   EndSwitch
WEnd




Func _TV($Dossier)


   Global $GUI2 = GUICreate("Form2", 365, 583, 100, 24, $WS_MINIMIZEBOX)


   $iDossierCible = GUICtrlCreateInput($Dossier, 5, 5, 170, 20, $ES_READONLY + $ES_AUTOHSCROLL)


   GUICtrlSetTip(-1, $Dossier)
   $OuvDossierCible = GUICtrlCreateButton("Ouvrir ce dossier", 180, 5, 90, 20)


   $reduire_2 = GUICtrlCreateButton("-", 315, 5, 20, 20)
   $Fermer = GUICtrlCreateButton("X", 335, 5, 20, 20)

   GUICtrlCreateLabel("", 5, 30, 350, 1, $SS_SUNKEN)



   Local $Treeview = GUICtrlCreateTreeView(5, 35, 350, 480, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
   Local $Annonces_tv = GUICtrlCreateTreeViewItem("Annonces", $Treeview)
   GUICtrlSetColor(-1, 0x0000C0)
   Local $Photos_tv = GUICtrlCreateTreeViewItem("Photos", $Treeview)
   GUICtrlSetColor(-1, 0xDFC230)

   $Annonce = _FileListToArray($Dossier, "*.txt", 1)
   If Not @error Then
      For $a = 1 To $Annonce[0]
         GUICtrlCreateTreeViewItem($Annonce[$a], $Annonces_tv)
      Next
   EndIf
   $Photo = _FileListToArray($Dossier, "*.jpg", 1)
   If Not @error Then
      For $b = 1 To $Photo[0]
         GUICtrlCreateTreeViewItem($Photo[$b], $Photos_tv)
      Next
   EndIf

   $ChCocheAnn = GUICtrlCreateCheckbox("cocher / décocher les annonces", 5, 515, 190, 20)
   $ChCochePh = GUICtrlCreateCheckbox("cocher / décocher les photos", 5, 535, 190, 20)
   $CocheAnn = 0
   $CochePh = 0


   $OuvSel = GUICtrlCreateButton("&Ouvrir la sélection", 235, 525, 120, 20)




   GUICtrlSetState($Annonces_tv, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
   GUICtrlSetState($Photos_tv, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "Display"-item and paint in bold


   GUISetState(@SW_SHOW)

   While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
         Case $GUI_EVENT_CLOSE, $Fermer
            GUIDelete($GUI2)
            ExitLoop
         Case $reduire_2
            GUISetState(@SW_MINIMIZE, $GUI2)

         Case $Annonces_tv
            If $CocheAnn = 0 Then
               For $a = 0 To _GUICtrlTreeView_GetCount($Treeview)
                  _GUICtrlTreeView_SetCheckedByIndex($Treeview, $Annonces_tv, $a, True)
               Next
               $CocheAnn = 1
            Else
               For $a = 0 To _GUICtrlTreeView_GetCount($Treeview)
                  _GUICtrlTreeView_SetCheckedByIndex($Treeview, $Annonces_tv, $a, False)
               Next
               $CocheAnn = 0
            EndIf

         case $Photos_tv
                        If $CochePh = 0 Then
               For $a = 0 To _GUICtrlTreeView_GetCount($Treeview)
                  _GUICtrlTreeView_SetCheckedByIndex($Treeview, $Photos_tv, $a, True)
               Next
               $CochePh = 1
            Else
               For $a = 0 To _GUICtrlTreeView_GetCount($Treeview)
                  _GUICtrlTreeView_SetCheckedByIndex($Treeview, $Photos_tv, $a, False)
               Next
               $CochePh = 0
            EndIf

         Case $OuvDossierCible
            $DossierCible = GUICtrlRead($iDossierCible)
            If FileExists($DossierCible) Then ShellExecute($DossierCible)

         Case $OuvSel

            For $a = 0 to _GUICtrlTreeView_GetCount($Treeview)
               If _GUICtrlTreeView_GetChecked($Treeview,$a) Then
                  if _GUICtrlTreeView_GetText($Treeview,$a) <> "annonces" and _GUICtrlTreeView_GetText($Treeview,$a) <> "Photos" then MsgBox(0, "", $Dossier & "\" & _GUICtrlTreeView_GetText($Treeview, $a))
               EndIf
            Next



      EndSwitch
   WEnd




EndFunc   ;==>_TV

j'ai codé deux arborescences...
  • L'un pour les TXT
  • L'autre pour les JPG

Le souci : j'ai codé/scripté un bouton pour qu'il m'affiche dans une msgbox, les cases que j'ai cochées ;)
Et ça ne fonctionne pas sur la deuxième arborescence...

En gros, que j'ai 10 ou 20 (etc) cases cochées dans cette arborescence, il s'arrête après les 4 premières cases...
Bien que _guictrltreeview_getcount me sort bien le total... (^^)

Je perds mon latin là.


Pouvez-vous m'aider à "piger" ce que j'ai foiré ?

Merci à tous.
L'entraide, c'est mon dada ;)
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Ouvrir un dossier trié par type

#8

Message par franco »

Lu'.

Image Résolu :D

Mon souci, c'est que je pensais que le "listing" (dans une boucle for ... in) se faisait pareil qu'avec une listview...
Et vu que j'ai jamais fait de treeview, me suis dit qu'il fallait surement utilisé un simple _guictrltreeview_gettext...

Ma recherche en français m'a pas donné ce que je voulais... Bien que je sois tombé sur le boulot (du bon ^^) de tlem sur les treeview...
=> Du coup, hop : recherche in english...

Suis tombé sur la "solution" plusieurs fois avant que je me décide à adapter et tester...
=> Sur cette réponse : https://www.autoitscript.com/forum/topi ... nt-1045775

j'ai adapté et testé avec case à cocher et msgbox... Et tout roule.


Donc voici le script :
Func _TV($Dossier)

   $TotalAnn = 0
   $TotalPh = 0
   $CocheAnn = 0
   $CochePh = 0


   Global $GUI2 = GUICreate("Form2", 370, 550, 100, 24, $WS_MINIMIZEBOX)

   $iDossierCible = GUICtrlCreateInput($Dossier, 5, 5, 170, 20, $ES_READONLY + $ES_AUTOHSCROLL)
   GUICtrlSetTip(-1, $Dossier)

   $OuvDossierCible = GUICtrlCreateButton("Ouvrir ce dossier", 180, 5, 90, 20)

   GUICtrlCreateLabel("", 5, 30, 355, 1, $SS_SUNKEN)

   Local $TreeviewAnn = GUICtrlCreateTreeView(5, 35, 355, 220, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
   Local $Annonces_tv = GUICtrlCreateTreeViewItem("Annonces", $TreeviewAnn)
   GUICtrlSetColor(-1, 0x0000C0)

   $Annonce_list = _FileListToArray($Dossier, "*.txt", 1)
   If Not @error Then
      $TotalAnn = $Annonce_list[0] + 1
      Global $ItemAnn[$TotalAnn]

      For $a = 1 To $Annonce_list[0]
         $ItemAnn[$a] = GUICtrlGetHandle(GUICtrlCreateTreeViewItem($Annonce_list[$a], $Annonces_tv))
      Next
   EndIf

   GUICtrlCreateLabel("", 5, 260, 355, 1, $SS_SUNKEN)

   Local $TreeviewPh = GUICtrlCreateTreeView(5, 265, 355, 220, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
   Local $Photos_tv = GUICtrlCreateTreeViewItem("Photos", $TreeviewPh)
   GUICtrlSetColor(-1, 0xB80000)

   $Photo_list = _FileListToArray($Dossier, "*.jpg", 1)
   If Not @error Then
      $TotalPh = $Photo_list[0] + 1
      Global $ItemPh[$TotalPh]
      For $b = 1 To $Photo_list[0]
         $ItemPh[$b] = GUICtrlGetHandle(GUICtrlCreateTreeViewItem($Photo_list[$b], $Photos_tv))
      Next
   EndIf

   GUICtrlCreateLabel("", 5, 490, 355, 1, $SS_SUNKEN)


   $OuvSel = GUICtrlCreateButton("&Ouvrir la sélection", 235, 496, 120, 20)

   $reduire_2 = GUICtrlCreateButton("-", 320, 5, 20, 20)
   $Fermer = GUICtrlCreateButton("X", 340, 5, 20, 20)


   GUICtrlSetState($Annonces_tv, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
   GUICtrlSetState($Photos_tv, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "Display"-item and paint in bold


   GUISetState(@SW_SHOW)

   While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
         Case $GUI_EVENT_CLOSE, $Fermer
            GUIDelete($GUI2)
            ExitLoop
         Case $reduire_2
            GUISetState(@SW_MINIMIZE, $GUI2)

         Case $Annonces_tv
            If $CocheAnn = 0 Then
               For $a = 0 To _GUICtrlTreeView_GetCount($TreeviewAnn)
                  _GUICtrlTreeView_SetCheckedByIndex($TreeviewAnn, $Annonces_tv, $a, True)
               Next
               $CocheAnn = 1
            Else
               For $a = 0 To _GUICtrlTreeView_GetCount($TreeviewAnn)
                  _GUICtrlTreeView_SetCheckedByIndex($TreeviewAnn, $Annonces_tv, $a, False)
               Next
               $CocheAnn = 0
            EndIf
            _GUICtrlTreeView_SetChecked($TreeviewAnn, 0, False)

         Case $Photos_tv
            If $CochePh = 0 Then
               For $b = 0 To _GUICtrlTreeView_GetCount($TreeviewPh)
                  _GUICtrlTreeView_SetCheckedByIndex($TreeviewPh, $Photos_tv, $b, True)
               Next
               $CochePh = 1
            Else
               For $b = 0 To _GUICtrlTreeView_GetCount($TreeviewPh)
                  _GUICtrlTreeView_SetCheckedByIndex($TreeviewPh, $Photos_tv, $b, False)
               Next
               $CochePh = 0
            EndIf
            _GUICtrlTreeView_SetChecked($TreeviewPh, 0, False)

         Case $OuvDossierCible
            $DossierCible = GUICtrlRead($iDossierCible)
            If FileExists($DossierCible) Then ShellExecute($DossierCible)

         Case $OuvSel
            $DossierCible = GUICtrlRead($iDossierCible)
            If $TotalAnn <> 0 Then
               $count_ann = _GUICtrlTreeView_GetCount($TreeviewAnn) - 1
               For $i = 0 To $count_ann
                  If _GUICtrlTreeView_GetChecked($TreeviewAnn, $ItemAnn[$i]) Then MsgBox(0, "", $DossierCible & "\" & _GUICtrlTreeView_GetText($TreeviewAnn, $ItemAnn[$i]))
               Next
            EndIf

            If $TotalPh <> 0 Then
               $count_ph = _GUICtrlTreeView_GetCount($TreeviewPh) - 1
               For $i = 0 To $count_ph
                  If _GUICtrlTreeView_GetChecked($TreeviewPh, $ItemPh[$i]) Then MsgBox(0, "", $DossierCible & "\" & _GUICtrlTreeView_GetText($TreeviewPh, $ItemPh[$i]))
               Next
            EndIf

      EndSwitch
   WEnd


EndFunc   ;==>_TV
Il y a probablement - si ce n'est surement - des lignes inutiles... mais en tout cas, ça fonctionne.


Je peux donc me passer d'ouvrir le dossier et d'utiliser ce procédé
.



@+ et bonnes fêtes à tous, si on ne se recroise plus. :D
L'entraide, c'est mon dada ;)
Répondre