IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Barre de progression pendant un TRI


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut Barre de progression pendant un TRI
    Bonjour,

    J'ai un programme de traitement de fichier avec une barre de progresion de la 1ère à la dernière ligne.

    Dernièrement on m'a demandé de traiter le fichier dans un ordre spécifique. J'ai donc tous simplement utiliser la méthode de tri proposer par le TStringList.

    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
     
    function TriFichier(List: TStringList; Index1, Index2: Integer): Integer;
    Var
      S1, S2: string;
    begin 
      // gestion spécifique de clef
      S1 := LectureClef(List[Index1]); 
      S2 := LectureClef(List[Index2]); 
     
      if S1 > S2 then
        Result := 1
      else
        if S1 < S2 then
          Result := -1
        else
          Result := 0;
    end;
     
    procedure TForm1.TrieFichier(FichierATrier : TStringList);
    begin
      if ClefDeTri>'' then
        FichierATrier.CustomSort(TriFichier);
    end;
    Mon problème c'est que le tri du fichier prends 90 % (estimation à la louche) du temps de traitement.
    Ma barre de progression devient donc "ridicule" comme dirait l'autre.

    Comment suivre la progression d'un tel système de tri ?

    Je fais donc appel à votre sagacité et votre expérience pour me proposer une solution intelligente.

    a+

  2. #2
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Salut,

    Il faudrait mettre un compteur d'appel CPT dans la fonction CallBack de comparaison.
    LE problème, c'est que l'on connait pas à l'avance, combien de fois le tri Quicksort de Delphi va faire appel à cette fonction de callBack.

    Si on part du principe que l'on connait ce nombre TOT, le %age d'avancement est trivial.

    Maintenant, puisqu'il s'agit d'un tri Quicksort il me semble, il faudrait peut etre faire un tour du coté du forum Algorithme, pour demander un nombre "moyen" d'appel de la fonction de comparaison en fonction du nombre d'éléments de départ.
    Peut-être que tu pourras avoir une jauge "a peu près" réaliste avec ces données.

    De plus, si ta liste est partiellement triées ou totalement dans le désordre, tu peux peut être affiner ce nombre TOT en fonction de tes propres données (un peu +, un peu -...?)

    bon courage !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut,

    Le problème en réalité c'est que tu as aucun moyen de savoir, à priori le temps que va prendre ton tri. Tout ce que tu peut faire c'est une estimation du temps que ça va prendre. Quick sort a une complexité algorithmique en O(n ln(n)), mais pour plus de détail, regarde ce lien ou sur le forum algo.

    http://fr.wikipedia.org/wiki/Tri_rapide

    Sinon, c'est peut-être une idée stupide, mais tu ne pourrais pas faire une barre ""infini", comme celle qui se lance avec la commande rechercher sous Windows ?

    @+.

  4. #4
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Sans oublier les doubles barres à la mode version K2000, de cette façon ce n'est pas en rapport avec le temps de traitement, mais au moins ça matérialise le temps d'attente

    Pas trop une solution pour puriste, simplement une roue de secours, somme toute assez élégante s'il n'est pas possible de calculer avec précision les 100%.

  5. #5
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Bien,
    Vous ne faites qu'apporter de l'eau à mon moulin


    a+

  6. #6
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    J'ai jamais essayé, mais ce serait interessant de voir si calculer un nombre 'fictif' de tour dans la fonction callback.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TOT1 := NbElts * ln( NbElts );
    TOT2 := NbElts * NbElts;
    TOT := ( TOT1 + TOT2 ) / 2; // au pif la moyenne entre les complexité moyenne et maxi)
    et

    D'incrémenter la valeur CPT dans la fonction de callback.

    et de voir ou se situe CPT par rapport à TOT au fur et à mesure du tri selon plusieurs tris différents.

    C'est à tenter ^^

    PS: Sauf que je sais pas si la complexité correspond à UN seul appel à la fonction de comparaison !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  7. #7
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Ou bien de prendre le problème par un autre bout :

    Est-il possible de vers la fin de cette procédure de tri, de connaître exactement à un moment ce reste à taiter ?

    Si oui, il suffirait alors déjà dans un premier temps de lancer doucement la barre de progression, et à un certain moment de mettre en synchro le reste de la barre sur le reste du tri...

    Autrement dit : possible ou pas de connaître à un certain moment, le reste précis à gérer ?

  8. #8
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Mouaip,

    Le tri de mon fichier de 5Mo mettant près de deux heures, je pense qu'il va falloir que je fasse quelque chose
    de plus sioux que le "Veuillez patienter SVP !".

    J'ai à l'heure d'aujourd'hui d'autres priorités plus prioritaires, de l'ordre du bug convulsif de fin de semaine, mais en fin de semaine prochaine je vais m'atteler à la recherche d'une solution satisfaisante.

    Merci à suivre...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher une barre de progression pendant une commande
    Par aaaaadrien dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 26/05/2014, 11h15
  2. [XL-2007] Barre de progression pendant boucle While
    Par yaciin dans le forum Excel
    Réponses: 7
    Dernier message: 11/03/2014, 16h27
  3. Réponses: 2
    Dernier message: 24/06/2013, 23h19
  4. Réponses: 3
    Dernier message: 11/02/2010, 13h47
  5. Réponses: 2
    Dernier message: 26/08/2009, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo