Page 1 sur 1

(Résolu] Comment manipuler une liste chainée

Publié : mer. 15/mai/2013 14:06
par Micoute
Bonjour à tous,

j'ai un petit problème, je souhaiterais que, quand 2 éléments d'une liste structurée ont la même valeur, on puisse concaténer les 2 éléments.

Par exemple :
\Quand$ = "15/05/2013"
\Qui$ = "Moi"
\Quoi$ = "Programmer"

\Quand$ = "15/05/2013"
\Qui$ = "Elle"
\Quoi$ = "Faire la vaisselle
J'aimerais que ça devienne
"15/05/2013" + #LF$ + "Moi" + #LF$ + "Programmer" + #LF$ + "Elle" + #LF$ + "Faire la vaisselle"
Je vous remercie tous pour votre aide.

Re: Comment manipuler une liste chainée

Publié : mer. 15/mai/2013 16:18
par Ar-S
Une solution.

Code : Tout sélectionner


 
 Structure Truc
    Qui.s
    Quand.s 
    Quoi.s 
  EndStructure

  Global Dim A_Faire.Truc(1) ; 2 emplacements dans le tableau

  ; Ici la position '0' du tableau A_Faire() concernera Monsieur
  
  A_Faire(0)\Qui = "Monsieur doit "
  A_Faire(0)\Quand = "13-05-2013 " 
  A_Faire(0)\Quoi = "programmer "

; Ici la position '1' du tableau A_Faire() concernera Monsieur
  
  A_Faire(1)\Qui = "Madame doit "
  A_Faire(1)\Quand = "13-05-2013 " 
  A_Faire(1)\Quoi = "sortir Pepette "

; --------------------------------------

; PROCEDURE

Procedure.s TaskCheck(LaDate.s)
Shared tache.b

tache = 0
      ; Vérifier si des tâches sont prévues à cette date
      If LaDate = A_Faire(0)\Quand 
            tache + 1
            Formule.s = A_Faire(0)\Quand + #LF$ + A_Faire(0)\Qui + #LF$ + A_Faire(0)\Quoi
      EndIf      
      
      If LaDate = A_Faire(1)\Quand 
            tache + 1
            Formule.s = A_Faire(1)\Quand + #LF$ + A_Faire(1)\Qui + #LF$ + A_Faire(1)\Quoi
      EndIf
            
      If tache = 2
            Formule.s = A_Faire(0)\Quand + #LF$ + A_Faire(0)\Qui + #LF$ + A_Faire(0)\Quoi + #LF$ + A_Faire(1)\Qui + #LF$ + A_Faire(1)\Quoi
      ElseIf tache = 0
            Formule.s = "Pas de tâche de programmée"
      EndIf

      ProcedureReturn Formule.s   
EndProcedure

; ------------------------------

; -------Programme-------

DateRecuperee.s = "13-05-2013 "
Debug TaskCheck(DateRecuperee.s)

DateRecuperee.s = "14-05-2013 "
Debug TaskCheck(DateRecuperee.s)

; test  avec seulement une date de valide
 A_Faire(1)\Quand = "15-05-2013 " 
 
DateRecuperee.s = "15-05-2013 "
Debug TaskCheck(DateRecuperee.s)

Re: Comment manipuler une liste chainée

Publié : mer. 15/mai/2013 19:13
par Micoute
Bonsoir Ar-s et merci beaucoup,

J'avais déjà pensé à utiliser un tableau, mais le problème c'est que je ne peux pas savoir combien il y a de données dans ma BDD, je ne vais quand même pas faire une liste pour calculer longueur = ListSize(Activites()) et Dim Tableau(Longueur), ce serait un peu débile.

C'est pour cette raison que j'aurais préféré une liste, car il suffit de mettre un AddElement et la liste s'agrandit toute seule,
peut-être que je pourrais filtrer ma BDD pour la mettre dans l'ordre chronologique ? Mais le problème c'est que je ne sais pas comme comparer un élément de la liste avec un autre de la même liste, sinon je reprendrais la procédure.

En tout cas, merci encore et peut-être que quelqu'un d'autre connaît-il la réponse.

Re: Comment manipuler une liste chainée

Publié : mer. 15/mai/2013 22:06
par comtois
tu as regardé l'exemple de la doc pour la commande PushListPosition() ? à mon avis c'est ce qu'il te faut.

Re: Comment manipuler une liste chainée

Publié : mer. 15/mai/2013 23:38
par Demivec

Code : Tout sélectionner

Structure Truc
  Qui.s
  Quand.s 
  Quoi.s 
EndStructure

NewList Faire.Truc() 

DataSection
  tache:
  ;Qui, Quand, Quoi
  Data.s "Fred", "13-05-2013", "programme"
  Data.s "Freak", "13-06-2013", "programme"
  Data.s "Fred", "13-06-2013", "debug"
  Data.s "Fred", "13-06-2013", "dormir"
  Data.s "Fred", "13-05-2013", "dormir"
  Data.s "Fred", "13-05-2013", "manger"
  Data.s "Freak", "13-06-2013", "debug"
  
  Data.s "XXX Fin XXX", "XXX Fin XXX", "XXX Fin XXX"
EndDataSection

Restore tache
Repeat
  AddElement(Faire())
  Read.s Faire()\Qui
  Read.s Faire()\Quand
  Read.s Faire()\Quoi
Until Faire()\Qui = "XXX Fin XXX"
DeleteElement(Faire())
  
SortStructuredList(Faire(), #PB_Sort_Ascending, OffsetOf(Truc\Quand), #pb_string)
Define premQuand.s, enumerer.s

If FirstElement(Faire())
  premQuand = Faire()\Quand
  enumerer = premQuand + #LF$ + Faire()\Qui + #LF$ + Faire()\Quoi
EndIf 

While NextElement(Faire())
  If premQuand = Faire()\Quand
    enumerer + #LF$ + Faire()\Qui + #LF$ + Faire()\Quoi
  Else
    Debug enumerer
    premQuand = Faire()\Quand
    enumerer = premQuand + #LF$ + Faire()\Qui + #LF$ + Faire()\Quoi
  EndIf
Wend

If enumerer
  Debug enumerer
EndIf

Re: Comment manipuler une liste chainée

Publié : jeu. 16/mai/2013 12:17
par Micoute
Bonjour Demivec et merci énormément,

oui, c'est bien ça que je cherchais à faire, mais c'était trop simple et c'est surement pour ça qu je n'y ai même pas pensé.

Merci encore pour ce partage.

Re: Comment manipuler une liste chainée

Publié : jeu. 16/mai/2013 14:42
par Demivec
Micoute a écrit :Bonjour Demivec et merci énormément,

oui, c'est bien ça que je cherchais à faire, mais c'était trop simple et c'est surement pour ça qu je n'y ai même pas pensé.

Merci encore pour ce partage.
De rien :)