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 :

Problème de tri d'un worksheet dans l'environnement Ubuntu [Lazarus]


Sujet :

Lazarus Pascal

  1. #21
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    2 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 2 992
    Points : 7 338
    Points
    7 338
    Par défaut
    Citation Envoyé par jjnoui Voir le message
    Je n'ai toujours pas compris où se trouve la déclaration de DoCompareCells.
    Je ne trouve pas l'évènement OnCompareCells.
    Dans ton code il faut "câbler" l'événement OnFullCompareCells de l'objet Worksheet au code de tri. Cela peut se faire dans le create de la "Form".
    Cela devrait ressembler à cela pour ton code :
    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
    // uses LazUTF8;  
     
    procedure TFsortdemo.FormCreate(Sender: TObject);
    begin
       wb.Worksheet.OnFullCompareCells := @DoCompareCells;
    end;  
    procedure TFsortdemo.DoCompareCells(Sender: TObject; ACell1, ACell2: PCell; ASortKey: TsSortKey; var AResult: Integer);
    var
      A, B: string;
    begin
        A := TsWorksheet(Sender).ReadAsText(ACell1^.row, ACell1^.col);
        B := TsWorksheet(Sender).ReadAsText(ACell2^.row, ACell2^.col);
        AResult := UTF8CompareStr(A, B);
        if (ssoDescending in ASortKey.options) then AResult := -AResult;
    end;
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  2. #22
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut
    @Jipété

    Ouh la la!

    Là on fait une séance d'archéologie.

    Mes déboires datent de la fin du millénaire précédent ou du début de l'actuel....

    Donc je risque de ne pas entièrement reconstituer le problème.

    A cette époque, je ne me rappelle pas si c'était sous Windows 98 ou Windows XP, j'avais l'habitude de refaire mon système tous les 6 mois, cela le 'purgeait' un peu et j'y gagnait en rapidité de démarrage notamment.

    Quand je refaisait le système je branchais un disque de rechange, faisait l'installation de l'OS, puis je réinstallais les différents softs et enfin je faisais une copie des répertoires depuis l'ancien disque système.

    Autant que je me souvienne l'installation se faisait sur un disque via son numéro et non par un nom de volume; le problème était que le numéro était différent sous le Windows qui démarrait et le numéro donné dans le bios!

    En fait j'aurais du débrancher tous les disques sauf le disque cible et ne remettre les autres qu'à la fin du processus d'installation mais le PC étant bien caché, il m'était difficile d'accéder physiquement aux disques.

    Je me souviens aussi qu'à une époque j'avais sur 3 disques différents 3 OS : 2 Windows et un Ubuntu

    J'ai aussi utilisé Grub, mais celui avait si je ne me trompes pas le défaut de modifier le secteur de boot de tous les disques, alors si le grub claquait, plus de boot possible avant de réparer les secteurs de démarrage.

    Passée cette expérience redoutable j'ai pris l'option de ne pas intégrer les OS dans le processus de Grub, mais plutôt de choisir au démarrage de la machine (dans le bios) sur quel disque booter.

    Je ne fais plus maintenant de 'purge' semestrielle; bigresoft n'aime pas trop ce genre de bidouille.

    Et pour Ubuntu, je n'ai plus maintenant ce genre de problème grâce à la VM.

  3. #23
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut
    @♀jurassic pork:


    YES!!

  4. #24
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut
    toujours @jurassic pork :
    désolé, faute de frappe le symbole de genre (féminin) est inapproprié.

  5. #25
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut Merci à tous
    Je vais ici remercier tous les participants.

    Devrais-je poster le code source et la form pour information?

    Votre avis.

  6. #26
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    7 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : mars 2003
    Messages : 7 818
    Points : 57 361
    Points
    57 361
    Billets dans le blog
    2
    Par défaut
    Bonjour,
    Citation Envoyé par jjnoui Voir le message
    Devrais-je poster le code source et la form pour information?

    Votre avis.
    Ce serait sympa, en guise de conclusion.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #27
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut Conclusion
    Pour remercier ceux qui m'ont aidé patiemment et pour ceux que cela peut dépanner voici les fichier pas et dfm du programme sortdemo.

    Ce programme, le plus simple possible, résout et vérifie le tri de données qui contiennent des espaces; pour plus d'infos concernant le problème remontez au début de la discussion.

    Contenu de la Form :

    - un bouton ('load') déclenche le chargement de données dans une 'feuille de calcul'.

    - un bouton ('sort') déclenche le tri des données précédemment chargées.

    - une feuille de calcul ('TsWorksheetGrid');

    - un controle de la feuille de calcul ('TsWorkbookSource');


    Si vous souhaitez vérifier par vous-même :

    - exécutez le programme tel quel, notez l'ordre des données

    - mettez en commentaire la ligne 84 du fichier sortdemo.pas puis exécutez le programme, comparer l'ordre des données obtenu avec celui du test précédent.

    Le code du fichier sortdemo.lfm qui correspond à la description de la Form avec ses propriétés et ses méthodes :

    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
     
    object Fsortdemo: TFsortdemo
      Left = 283
      Height = 375
      Top = 250
      Width = 643
      Caption = 'sortdemo'
      ClientHeight = 375
      ClientWidth = 643
      OnCreate = FormCreate
      object BtnLoad: TButton
        Left = 8
        Height = 25
        Top = 8
        Width = 75
        Caption = 'Load'
        OnClick = BtnLoadClick
        TabOrder = 0
      end
      object BtnSort: TButton
        Left = 8
        Height = 25
        Top = 48
        Width = 75
        Caption = 'Sort'
        OnClick = BtnSortClick
        TabOrder = 1
      end
      object ws: TsWorksheetGrid
        Left = 232
        Height = 276
        Top = 32
        Width = 360
        FrozenCols = 0
        FrozenRows = 0
        PageBreakPen.Color = clBlue
        PageBreakPen.Style = psDash
        ReadFormulas = False
        WorkbookSource = wb
        AutoAdvance = aaDown
        DefaultColWidth = 64
        DefaultRowHeight = 24
        TabOrder = 2
      end
      object wb: TsWorkbookSource
        FileFormat = sfUser
        Options = []
        Left = 32
        Top = 32
      end
    end
    Le contenu du fichier sortdemo.pas qui correspond au code source du programme:

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    unit usortdemo;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
     
    // pour UTF8CompareStr dans DoCompareCells
    // nécéssaire pour trier correctement les données contenant des espaces.
      LazUTF8,
     
    // pour spreadsheet
      fpsTypes,
      fpsutils,
      fpspreadsheet, fpspreadsheetctrls, fpspreadsheetgrid;
     
    type
      TFsortdemo = class(TForm)
        BtnLoad: TButton;
        BtnSort: TButton;
        wb: TsWorkbookSource;
        ws: TsWorksheetGrid;
        procedure BtnLoadClick(Sender: TObject);
        procedure BtnSortClick(Sender: TObject);
     
    // nécéssaire pour trier correctement les données contenant des espaces.
        procedure DoCompareCells(Sender: TObject; ACell1, ACell2: PCell; ASortKey: TsSortKey; var AResult: Integer);
        procedure FormCreate(Sender: TObject);
     
      private
     
      public
     
      end;
     
    var
      Fsortdemo: TFsortdemo;
     
    implementation
     
    {$R *.lfm}
     
    var
      sortParams: TsSortParams;
     
    // nécéssaire pour trier correctement les données contenant des espaces.
    procedure TFsortdemo.DoCompareCells(Sender: TObject; ACell1, ACell2: PCell; ASortKey: TsSortKey; var AResult: Integer);
    var
      A, B: string;
    begin
      A := TsWorksheet(Sender).ReadAsText(ACell1^.row, ACell1^.col);
      B := TsWorksheet(Sender).ReadAsText(ACell2^.row, ACell2^.col);
      AResult := UTF8CompareStr(A, B);
      if (ssoDescending in ASortKey.options) then AResult := -AResult;
    end;
     
    procedure TFsortdemo.BtnLoadClick(Sender: TObject);
    begin
      // initialisation et chargement manuel du Worksheet
      with wb.Worksheet do begin
        Clear;
        WriteText(0, 0, 'ACinq');
        WriteText(1, 0, 'A Huit');
        WriteText(2, 0, 'ANeuf');
      end;
    end;
     
    procedure TFsortdemo.BtnSortClick(Sender: TObject);
    begin
      sortParams := InitSortParams(true, 1);    // Col sort, Number of sort (cols or rows)
      sortParams.Keys[0].ColRowIndex := 0;      // ColRowIndex    Index of the sorted column or row
      sortParams.Keys[0].Options := [];         // TsSortOption = (ssoDescending, ssoCaseInsensitive, ssoAlphaBeforeNum)
      with wb.Worksheet do begin
        Sort(sortParams, 0, 0, GetLastRowIndex, GetLastColIndex);
      end;
    end;
     
    procedure TFsortdemo.FormCreate(Sender: TObject);
    begin
    // nécéssaire pour trier correctement les données contenant des espaces.
      wb.Worksheet.OnFullCompareCells := @DoCompareCells;
    end;
     
    end.
    Voilà, je pense que tout est dit mais ......

  8. #28
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    2 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 2 992
    Points : 7 338
    Points
    7 338
    Par défaut
    Hello,
    le mieux pour mettre à disposition un projet c'est de mettre tous les fichiers source du projet (1) dans un répertoire que l'on zippe et on met le zip en pièce jointe.

    (1) Tous les fichiers sauf les répertoires lib et backup et sauf bien sur le .exe qui est énorme.

    Par exemple avec seulement les 2 codes que tu as postés, je ne suis pas arrivé à reconstituer un projet (il faut dire que je n'ai pas insisté).

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #29
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut
    @jurassic pork :

    Quand on m'explique longtemps je comprend vite

    Bonne journée,
    Jean-Jacques
    Fichiers attachés Fichiers attachés

  10. #30
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    2 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 2 992
    Points : 7 338
    Points
    7 338
    Par défaut
    voilà avec toutes les sources de ton projet, il n' y a plus de problème pour le compiler et l'exécuter
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #31
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 889
    Points : 4 305
    Points
    4 305
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Hello,

    je viens d'essayer ton code de tri dans une VM Sous Ubuntu 20.04 Lazarus 2.06 , même problème de tri que celui expliqué dans le premier message de la discussion.
    Par contre en remplaçant le UTF8CompareText par un UTF8CompareStr cela semble fonctionner :
    Code :

    Ami calmant, J.P
    Salut JP, bon a savoir faudra que je regardes dès j'aurai le temps la différence entre UTF8CompareText et UTF8CompareStr a moins que tu ai déja la réponse

    Cool Merci pour ton test
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  12. #32
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut UTF8CompareText vs UTF8CompareStr
    En envoyant à duckduckgo la requête 'UTF8CompareText vs UTF8CompareStr' Je viens de tomber sur une tentative d'explication. Si ça peut faire avancer le shmilblick :

    https://lazarus-ccr.sourceforge.io/d...mparetext.html

  13. #33
    Membre régulier
    Homme Profil pro
    retraité informaticien
    Inscrit en
    novembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité informaticien

    Informations forums :
    Inscription : novembre 2008
    Messages : 84
    Points : 72
    Points
    72
    Par défaut juré! J'arrête là.
    En continuant de regarder les résultat de ma requête soumise au 'petit canard' je suis tombé sur bien plus drôle!

    https://lazarus.lazarus.freepascal.n...ely-inadequate

    Bon courage!

  14. #34
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 889
    Points : 4 305
    Points
    4 305
    Billets dans le blog
    2
    Par défaut
    Hello ok, merci Jean-jacques en effets compareStr est sensible à la casse alors que compareText non. A ce noter dans un coin de sa tête au cas ou.

    Pour l'instabilité de l'algo QuickSort, c'est connu, la stabilité dépend de comment est implémenté cet algorithme de trie, c'était d'ailleurs pour cela que j'avais codé l'algo QuickSort et DualQuickSort en version "Stable" pour mon projet BZScene pour trier correctement mes tableaux.

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/02/2011, 14h53
  2. Problème de tri dans formulaire
    Par antoine1504 dans le forum IHM
    Réponses: 1
    Dernier message: 23/07/2007, 12h15
  3. Problème de tri dans ma page ASP.
    Par laurent_diep dans le forum ASP
    Réponses: 4
    Dernier message: 01/03/2007, 16h59
  4. Problème de tri dans excel
    Par fabou3377 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/10/2006, 06h20
  5. Problème de tri de nombre négatif dans un état
    Par loutsky dans le forum Access
    Réponses: 11
    Dernier message: 21/04/2006, 14h30

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