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
