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

:roll:

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

:idea:

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