Page 1 sur 1
list
Publié : sam. 05/sept./2009 8:36
par flex_fan
Bonjour à tous,
j'ai deux list, une de type:
10,11,12
et une deuxième de type:
10,12,11
Il y a t'il une possibilité de comparer deux list ?
Quelcun à l'ambilité de me dire ou je peut lire plus sur les instructions applicables pour les list ?
merci en avance pour tout aide

Publié : sam. 05/sept./2009 10:11
par MLD
Bonjour et bienvenu
Tu aurais du mettre ton sujet dans la rubrique débutant.
Tu ne donnes pas assez de précisions. Tu ne dis dit pas si simplement il faut dire non les deux listes ne sont pas identiques ou une recherche plus complexe est nécèssaire?
Dans tous les cas il faut lire les listes ligne par ligne, et faire une comparaison logique.
Tu trouveras tous ce qu'il te faut dans la doc PB.
Propose nous un code, si cela ne fonctionne pas, alors l'on pourra t'aidé, mais avant creuse toi un peu la tête.
Si je ne me trompe pas tu dois être vraiment débutant en programmation.
Bonne journée
Michel
Publié : sam. 05/sept./2009 17:41
par djes
Oui, il faut être plus précis dans tes explications, pour savoir au moins ce que tu veux obtenir.
A noter qu'avec la 4.40 il y a maintenant les "map" qui, à mon avis, sont une grosse amélioration

Publié : sam. 05/sept./2009 17:49
par Backup
sujet déplacé..
Publié : lun. 07/sept./2009 9:07
par MLD
Bonjour flex_fan
J'ai lu ton message perso.
1° Passe par le forum ,ce sera mieux. Les autres programmeurs ne te mangeront pas. Il sont tous trés sympas, "avec la particularité de chacun".
2° Encore une fois tu n'es pas assez précis. Sous quelle forme sont tes listes ?? fichiers?? listes chainées?? Tableaux??
3° Pour comparer ligne a ligne deux listes c'est simple
For X = 1 to nombre de ligne
if ligneliste1$,(X) <> ligneliste2$,(X)
Différencencedanslaliste.b =1
endif
next
if Différencencedanslaliste.b =1
Debug "les listes sont différentes"
else
Debug " les listes sont identiques
endif
Ce qui manque c'est comment ouvrir les listes parceque tu nous dis pas comment elles sont enregistrées
Publié : lun. 07/sept./2009 9:51
par Le psychopathe
MLD a écrit :Bonjour flex_fan
For X = 1 to nombre de ligne
if ligneliste1$,(X) <> ligneliste2$,(X)
Différencencedanslaliste.b =1
endif
next
if Différencencedanslaliste.b =1
Debug "les listes sont différentes"
else
Debug " les listes sont identiques
endif
Tu fais une erreur : LA TAILLE DE LA DEUXIEME LISTE .... Les listes ne sont peut-être pas identique.
Publié : lun. 07/sept./2009 11:01
par MLD
Salut le psychopathe
Exact , mais comme je ne sais pas. J'ai simplement proposé une solution"basique"
Publié : lun. 07/sept./2009 14:34
par kernadec
bonjour
voila je ferais comme ça pour comparer deux newlist structure
avec doublons a l'interieur de chacune des newlists
Code : Tout sélectionner
;###################################
;# Compare newlist kernadec 2009 #
;###################################
Structure Liste1
numero1.l
EndStructure
Structure Liste2
numero2.l
EndStructure
Structure Liste3
numero3.l
EndStructure
Structure Liste4
numero4.l
EndStructure
NewList stock1.Liste1()
NewList stock2.Liste2()
NewList stock3.Liste3()
NewList stock4.Liste4()
ResetList(stock1())
For i.l=1 To 5
AddElement(stock1())
stock1()\numero1=Random(5)
Next i
ResetList(stock2())
For i.l=1 To 5
AddElement(stock2())
stock2()\numero2=Random(15)
Next i
; resultats des deux listes dans une nouvelle liste
ForEach stock1()
AddElement(stock3())
stock3()\numero3=stock1()\numero1
Next
ForEach stock2()
AddElement(stock3())
stock3()\numero3=stock2()\numero2
Next
; tri de la nouvelle liste
SortStructuredList(stock3(),0,OffsetOf(liste3\numero3),#PB_Sort_Long)
Debug ""
Debug "newlist complete avec doublons"
ForEach stock3()
Debug "valeur: "+Str(stock3()\numero3)
Next
Debug ""
Debug "doublons retiré dans la nouvelle liste"
ResetList(stock3())
ForEach stock3()
If stock3()\numero3<>0
AddElement(stock4())
stock4()\numero4=stock3()\numero3
Else
AddElement(stock4())
EndIf
ForEach stock3()
If stock4()\numero4<>stock3()\numero3
AddElement(stock4())
stock4()\numero4=stock3()\numero3
EndIf
Next
Next
ResetList(stock4())
Debug ""
ForEach stock4()
Debug "valeur: "+Str(stock4()\numero4)
Next
et pour formater et sauvegarder une newlist en fichier
avec Vista et l'écriture du fichier sur c , il faudra donner un chemin
avec un répertoire car pour l'écriture sur le disque C, le system demande une autorisation
Code : Tout sélectionner
;#########################################
;## kernadec 09/2009 ##
;## Sauvegarde newliste structure ##
;#########################################
Global fruit.s,fichier$
fichier$="c:\stockfruit.txt"
Structure liste
nom.s
numero.l
taille.d
poids.d
Coef.f
EndStructure
Global NewList stock.liste()
Procedure ecriture(fichier$)
CreateFile(0,fichier$)
ForEach stock()
fruit=stock()\nom+"\"+Str(stock()\numero)+"\"+StrD(stock()\taille,5)+"\"+StrD(stock()\poids,5)+"\"+StrF(stock()\Coef,10)
WriteStringN(0,fruit)
Debug fruit
Next
CloseFile(0)
EndProcedure
Procedure lecture(fichier$)
ReadFile(0,fichier$)
While Eof(0)=0
fruit=ReadString(0,#PB_Ascii)
AddElement(stock())
stock()\nom=StringField(fruit,1,"\")
stock()\numero=Val(StringField(fruit,2,"\"))
stock()\taille=ValD(StringField(fruit,3,"\"))
stock()\poids=ValD(StringField(fruit,4,"\"))
stock()\Coef=ValF(StringField(fruit,5,"\"))
Wend
CloseFile(0)
EndProcedure
;stock de données avec NewList sructure
Procedure element()
AddElement(stock())
stock()\nom="Pomme"
stock()\numero=5
stock()\taille=12.5
stock()\poids=0.12535
stock()\Coef=0.23456789
AddElement(stock())
stock()\nom="Poire"
stock()\numero=2
stock()\taille=9.2
stock()\poids=0.09515
stock()\Coef=0.2753951
EndProcedure
element()
Debug "Sauvegarde de la liste dans un fichier.txt formatée en lignes"
Debug ""
ResetList(stock())
ecriture(fichier$)
Debug ""
Debug "Restore la liste depuis le fichier.txt"
ClearList(stock())
lecture(fichier$)
ForEach stock()
Debug ""
Debug stock()\nom
Debug Str(stock()\numero)
Debug StrD(stock()\taille,5)
Debug StrD(stock()\poids,5)
Debug StrF(stock()\Coef,10)
Next
Cordialement
Re: list
Publié : mar. 15/sept./2009 18:49
par flex_fan
Bonjour à tous,
je remercie à tous qui ont essayé de répondre à ma question, particulièrement à MLD, le psychopate, Dobro, Kernadek, djes.
Malheureusement, soit que je me suis mal exprimè, soit pour d'autres raisons, j'ai pas trouvé mon bonheur dans les réponses réçues.
pour concision, je me permet de répeter maintenant seulement la première question:
exist'il en Purebasic une instruction permettant de comparer deux lists ?
En subsidiaire, la chose qui m'interesse toujours est de savoir si deux lists, une 10,11, 12 et l'autre 10,12,11 sont égales en PureBasic.
Mon raisonement est celui que si j'ai deux portemonnais, un contenant trois billets de 5, 10 et 20 euro et un deuxième contenant trois billets de 20, 10 et 5 euro, le contenu des deux portemonnais est identique. Et que peut compte donc l'ordre de l'énumèration.
En purebasic donc, les les lists sont des énumérations ordonnées d'objets ou non ?
Merci encore pour votre patience
flex_fan

Re: list
Publié : mar. 15/sept./2009 20:41
par kernadec
bonsoir flex_fan
l'instruction de comparaison tu dois l'écrire!
regarde déjà si les deux newlist ont le même nombres d'objets avec "ListSize(ListeChainee())"
ensuite tu fais un tri de chacune d'elle pour effectuer la comparaison.
dans l'exemple précèdent, la boucle test du premier code est très proche de ce que tu demande,
à la première inégalité tu sors de la boucle ou de en fonction du test entre le nombre de doublons et le nombre d'objets...
Cordialement
Re: list
Publié : mar. 15/sept./2009 22:52
par flex_fan
merci kernadec,
j'avais dèjà un soupçon , et tu me la bien confirmé
Cordialement