PureBasic

Forums PureBasic
Nous sommes le Mer 27/Mar/2019 0:23

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: MergeList.. Une option supplémentaire
MessagePosté: Ven 28/Déc/2018 16:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8615
Yop.
Si ça ne demande pas trop de boulots, ajouter une option pour lorsque qu'on merge un ou les élément d'une liste vers une autre, ceux-ci restent tout de même dans la 1er liste..
Exemple

Dans le code ci dessous je merge les éléments de B() vers A()...
J'aimerai cependant que les éléments ne disparaissent pas de A().
Un petit flag #PB_List_NoErase par exemple

Code:

Macro Sort(Liste,strucname)
SortStructuredList ( Liste, #PB_Sort_Ascending|#PB_Sort_NoCase, OffsetOf(strucname), TypeOf(strucname) ) 
EndMacro




Structure Info
  CC.i
EndStructure

Global NewList A.Info()
Global NewList B.Info()

; Creation de la liste A
For i = 1 To 5
  AddElement(A())
  A()\CC = Random(5)
Next

; Création de la liste B
For i = 1 To 5
  AddElement(B())
  B()\CC = Random(10,6)
Next

; Trie des 2 listes par ordre croissant
Sort(A(),Info\CC)
Sort(B(),Info\CC)

; On vérifie
Debug "// Liste A() //"
ForEach A()
  Debug A()\CC
Next

Debug "// Liste B() //"
ForEach B()
  Debug B()\CC
Next


; On Merge les éléments de B vers A
ForEach A()
  MergeLists(B(), A(), #PB_List_After)
Next

;Re-Trie
Sort(A(),Info\CC)

Debug ""
Debug "Après merge des listes"
Debug "// Liste A() //"
ForEach  A()
  Debug a()\CC
Next

Debug "Tout va bien..."
Debug "Mon soucis c'est d'afficher B() à nouveau"
Debug "// Liste B() //"

ForEach B()
  Debug B()\CC
Next

Debug "A puuuu Rien"
Debug "Oui du coup ce code marche comme c'est précisé dans la doc.. C'est là mon soucis :D "

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Ven 28/Déc/2018 20:09 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
Code:
NewList a()
For a = 1 To 1000
  AddElement(a())
  a() =a
Next
NewList b()
CopyList(a(),b())
ForEach b()
  Debug b()
Next

genre ça ? o_O


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Ven 28/Déc/2018 20:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8615
Merci,

Mais non ^^
J'ai même remplacé mergeliste par un simple

Code:
ForEach B()
addelements (a())
A() = B()
Next


Mais je voulais juste une option à mergelist afin de ne pas avoir à copier la liste ou à me retaper un Addelement etc
;)

C'est plus une histoire de possibilité de mergelist qui me plairait de voir plutôt qu'un réel problème.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Sam 29/Déc/2018 16:35 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
Ok, donc en fait ce que tu souhaiterais, c'est pouvoir (par exemple) coller ta liste b() à la suite de ta liste a() tout en concervant la possibilité d'utiliser b() à la suite de ton oppération ?

Si c'est ça, je me permet d'exprimer mon avis qui n'est que mon avis et non pas la véritée vrai et absolut.

Celon moi, la fonction mergelist ne fait que donner l'adresse de la liste b() comme element suivant de la liste a() (histoir de ne pas avoir à copier la mémoire, ce qui rend l'oppération extrémement rapide) suite à quoi la fonction supprime l'adresse du premier element de la liste b() à cette même liste pour ne plus la rendre accécible.

Ta demande semble donc très simple à mettre en place, puisqu'il suffit de "zapper" la dernière oppération MAIS :

Celon moi, ça va à l'encontre des principes de purebasic. Je m'explique. PureBasic est un language qui se veut un maximum "noob friendly" hors, ce que tu demande ne l'est absolument pas.

Qu'un utilisateur tente d'accéder à une même liste chainé simultanément via 2 thread plante... Bon... Y'a un moment, si tu fait nimp avec ta mémoire, c'est ton problème.
Le soucis, c'est qu'avec conservation de l'accès aux données de ta liste b() via cette même liste ET en même temps via la liste a() (suite au merge) provoquerai ce même problème alors qu'on demande un accès à 2 liste "différente" (b() faisant partie intégrante de a() suite au mergeliste)

N'étant pas doué pour exprimer clairement ce que je veux dire, je t'ai fait un petit exemple qui devrait être plus parlant :
Code:
Global NewList a(),NewList b()
Procedure reada()
  ForEach a()
    Debug "A : " +a()
  Next
EndProcedure

Procedure readb(value)
  ForEach b()
    Debug "B : " +b()
  Next
EndProcedure


For a = 1 To 5
  AddElement(a())
  a() =  a
Next
For a = 5 To 20
  AddElement(b())
  b() = a
Next
ForEach b()
  AddElement(a())
  CopyMemory(@b(),@a(),SizeOf(integer))
Next
CreateThread(@readb(),0)
reada()


Comme tu peux le voir, les résultats sont assé farfelu... Et JE crois que Fred cherche à éviter ce genre de résultats avec les fonctions native de PB.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Sam 29/Déc/2018 17:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8615
Pour dire le pourquoi je voulais faire ceci.
A() = Liste de radios fixe géré par moi. Le prog va la chercher sur le web
B() = User Liste modifiable par l'user

En gros mon lecteur merge les 2 listes pour les afficher d'un bloc ( la liste A() ).
Si l'user décide de virer/ajouter une liste, je ne fais apparaitre que B() pour qu'il fasse ses modifs.
Il y a plusieurs façons de faire, je ne suis pas bloqué.

Citation:
Selon moi, la fonction mergelist ne fait que donner l'adresse de la liste b() comme element suivant de la liste a() (histoir de ne pas avoir à copier la mémoire, ce qui rend l'oppération extrémement rapide) suite à quoi la fonction supprime l'adresse du premier element de la liste b() à cette même liste pour ne plus la rendre accécible.


Je comprends ce que tu veux dire, reste à voir si c'est ce qui se passe et surtout si la team aurait de quoi rendre cette copie possible via un flag (quitte à utiliser un genre de macro invisible automatisant le ForEach b() : addelement a() : a() = b() : next )

Après tout on est dans "Suggestions et améliorations" et Noël n'est pas si loin :wink:

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Sam 29/Déc/2018 18:01 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1502
Dans le même style (jouer avec les listes) :mrgreen:

À un moment, j'ai refais une grande partie de mon media player en me disant que ce serait mieux d'utiliser des Maps plutôt que des Listes car justement je pourrais fusionner plusieurs listes sans avoir de doublons. J'ai passé 2H à refaire toute la partie liste, puis j'ai lancé et... :o toutes mes listes étaient en désordre. ? 8O alors que j'ai commencé un système pour que l'utilisateur puisse les trier :oops:
Jamais encore utilisé des Maps avec PB :( alors je relis la doc:
Map: « L'ordre d'insertion des éléments n'est pas conservé (contrairement à une liste), une map ne peut donc pas être triée. » :roll:
Retour en arrière (heureusement je backup tout le dossier à chaque gros changement) :)

:wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Sam 29/Déc/2018 21:08 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3299
@Marc56

ça dépend de ce qu'on trie. Les maps me donnent des vertiges dans le sens où la création de données est simplissime. Par contre, la gestion et la suppression de données, c'est difficile.

C'est-à-dire qu'une map permet de faire n'importe quoi et d'offrir l'accès à l'utilisateur si nécessaire. On peut faire des tableaux multi-dimensionnels, des listes. On peut faire un tableau spatio-temporel : imbouffable à schématiser. On peut faire un tableau en forme de panier de basket ou les noeuds sont des cases de données.

Bref, ça peut glisser vite comme une savonnette à la mousson.

Pourtant, avec rigueur, une map, ça permet le tri. Et c'est le but : accéder à une seule donnée, à partir d'une chaîne, et en un temps record.

Cette chaîne d'accès peut être comme un chemin de répertoire. Et, au lieu de déboucher sur une chaîne, ça peut déboucher sur un pointeur. Libre ensuite de pointer des listes, des tableaux ou des buffers mémoire selon les besoins.

Ce sont apparemment des sons que tu tries, pas la gestion des données.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Sam 29/Déc/2018 21:55 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3299
@ArS

peut-être copier ta demande, le plus simplement possible dans la section wishlist du site us/en.

Tu souhaites juste une option où MergeLists peut ne pas effacer la liste source.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: MergeList.. Une option supplémentaire
MessagePosté: Sam 29/Déc/2018 22:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8615
Probablement.
Je m'en occuperai ;)

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye