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

Lazarus Pascal Discussion :

TStringGrid : Trier une colonne qui contient des noms de fichiers [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut TStringGrid : Trier une colonne qui contient des noms de fichiers
    Bonjour,

    Dans mon Client FTP, j'affiche dans 2 StringGrids les noms des fichiers sources et ceux des fichiers uploadés.

    D'abord il faut remarquer que Linux et Windows ne trient pas par défaut de la même façon (enfin leurs explorateurs). Voici 2 aperçus du même répertoire, affichés dans le gestionnaire de fichiers de Linux et de Windows. Il suffit pour se convaincre de la différence de regarder l'ordre des Sansnom1xxx :


    Je préfère nettement le tri par défaut des sansNom1xxxx proposé par Linux à celui proposé par Windows... et donc je cherche le bon "tri".

    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
    52
    53
    procedure TForm1.FormCreate(Sender: TObject);
    var
      iRow : Integer;
    begin
      with SG1 do begin
        ColCount  := 1;
        RowCount  := 5;
        FixedCols := 0;
        FixedRows := 0;
        AutoFillColumns:= True;
        Cells[0,0] := 'Zzzzzzzzzzzz';
        Cells[0,1] := 'Sansnom1 - Copie.odt';
        Cells[0,2] := 'Sansnom1 - Copie.txt';
        Cells[0,3] := 'Aaaaaaaaaaaa';
        Cells[0,4] := 'Sansnom1.odt';
        SortOrder:= soAscending;
        SortColRow(True,0);
      end;
      with SG2 do begin
        ColCount  := 2;
        RowCount  := 5;
        FixedCols := 0;
        FixedRows := 0;
        AutoFillColumns:= True;
        Cells[0,0] := 'Zzzzzzzzzzzz';
        Cells[0,1] := 'Sansnom1 - Copie.odt';
        Cells[0,2] := 'Sansnom1 - Copie.txt';
        Cells[0,3] := 'Aaaaaaaaaaaa';
        Cells[0,4] := 'Sansnom1.odt';
        for iRow := 0 to RowCount -1 do
          Cells[1,iRow] := ChangeFileExt(Cells[0,iRow],'');
        SortOrder:= soAscending;
        SortColRow(True,1);
       end;
        with SG3 do begin
        ColCount  := 2;
        RowCount  := 5;
        FixedCols := 0;
        FixedRows := 0;
        AutoFillColumns:= True;
        Cells[0,0] := 'Zzzzzzzzzzzz';
        Cells[0,1] := 'Sansnom1 - Copie.odt';
        Cells[0,2] := 'Sansnom1 - Copie.txt';
        Cells[0,3] := 'Aaaaaaaaaaaa';
        Cells[0,4] := 'Sansnom1.odt';
        for iRow := 0 to RowCount -1 do begin
          Cells[1,iRow] := StringReplace(Cells[0,iRow],'.','a',[rfReplaceAll]);
          Cells[1,iRow] := StringReplace(Cells[1,iRow],' ','b',[rfReplaceAll]);
        end;
        SortOrder:= soAscending;
        SortColRow(True,1);
       end;
    end;
    Voici le résultat :

    Par défaut, le tri direct par SortColRow sur la colonne qui contient le nom des fichiers est conforme à Windows (cf SG1) aussi bien avec Lazarus/Win que Lazarus/Nux. Dans les 2 environnements, le tri engagé sur la Cols[2] dans SG3 semble fonctionner "comme" Linux mais la liste des caractères à remplacer (le point, l'espace) est-elle exhaustive ? Le tri est-il toujours réversible ?

    Ou y a-t-il une autre méthode ?

    Cordialement. Gilles
    Lazarus 0.9.31-FPC 2.6.1 - Win 7/Ubuntu 10.04.3 -32bits
    Dernière modification par Invité ; 01/03/2012 à 16h42.

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Pour ma part, pour afficher la liste comme sous Linux, je classerai uniquement le Nom du fichier (sans la partie extension), comme dans la SG2. Comme ca, plus de problème avec le point ...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Mick605,

    En enlevant l'extension, le classement n'est pas correct en SG2... justement parce qu'il ne tient plus compte des extensions. Ainsi, SansNom1 - Copie.txt arrive avant SansNom1 - Copie.odt.

    De plus, s'il y a d'autres points que celui de l'extension (genre Sansnom.1.txt), le problème apparaît ailleurs à nouveau. Pour l'instant, les problèmes détectés sont le point et surtout l'espace. Je n'ai pas essayé les autres caractères compris entre 32 et 64 mais cela semble moins usuel. Pour les caractères accentués et autres "ç" cela semble fonctionner correctement...

    Je crois que je vais garder la 3ème méthode. Elle a d'autre part l'avantage de permettre de préciser comment on situe le point, avant les chiffres, les lettres ou après ces dernières.

    C'est un problème mineur... Je vais me contenter de cette solution même si je n'ai aucune certitude de sa totale efficacité. Mais les problèmes les plus "usuels" semblent réglés.

    Merci pour votre aide.
    Cordialement. Gilles
    Dernière modification par Invité ; 03/03/2012 à 10h56.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/05/2008, 16h09
  2. Réponses: 1
    Dernier message: 28/12/2007, 12h14
  3. Réponses: 15
    Dernier message: 05/09/2006, 12h08
  4. comment faire une redirection vers une page qui contient des framsets
    Par zana74 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 31/08/2006, 13h03
  5. insertin d'une chaine qui contient des guillemets
    Par karimspace dans le forum Access
    Réponses: 7
    Dernier message: 13/02/2006, 11h55

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