Echange de chaîne de caractères, sans duplication.

Partagez votre expérience de PureBasic avec les autres utilisateurs.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Echange de chaîne de caractères, sans duplication.

Message par erix14 »

Quand on copie une variable texte dans une autre, PureBasic crée un espace mémoire et duplique la chaîne de caractères. Normal :D
Voici une méthode pour qu'une variable texte s'approprie le texte d'une autre variable sans duplication.
*Ptr1.LONG=Texte1.STRING
*Ptr2.LONG=Texte2.STRING

Texte1\s= "Toto"
Debug "Texte1 = " +Texte1\s
Debug "Texte2 = " +Texte2\s

*Ptr2\l=*Ptr1\l ; Texte2 s'approprie la chaîne de caractères de Texte1.
; On met le pointeur de Texte1 à zéro pour qu'à la prochaine
; affectation de Texte1 il soit créé un nouvel espace mémoire.
*Ptr1\l=0 ; <- c'est comme si Texte1 n'avait jamais eu d'affectation.

Debug "Texte1 = " +Texte1\s
Debug "Texte2 = " +Texte2\s
Le but de ceci, et de pouvoir emmagasiner des données dans une liste avec une plus grande vitesse.
Structure Personne
*Suivante.Personne
Nom.s
Age.l
EndStructure
Global Temp.Personne
Global *Personne.Personne

Procedure Ajoute(*var.LONG)
SizePersonne=SizeOf(Personne)
*var+4
*NouvellePersonne.Personne= AllocateMemory (SizePersonne)
CopyMemory (*var,*NouvellePersonne+4,SizePersonne-4)
*var\l=0
*NouvellePersonne\suivante=*Personne
*Personne=*NouvellePersonne
ProcedureReturn *NouvellePersonne
EndProcedure

For t=1 To 10
Temp\Nom= "Toto" + Str (t)
Temp\Age=t
Ajoute(@Temp)
Next

Repeat
Debug *Personne\Nom+ " : " + Str (*Personne\Age)
If *Personne\suivante=0:Break: EndIf
*Personne=*Personne\suivante
ForEver
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Par contre :

Code : Tout sélectionner

For t=1 To 10
  Temp\Nom= "Toto" + Str (t)
  Temp\Age=t
  Ajoute(@Temp)
  Debug Temp\Nom
Next
On perd les infos dans le prog principal...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Enfin bon là il ne s'agit pas vraiment d'échange de chaine...
Elle est plutôt "déplacée" dans ce cas

Mais effectivement il n'y a pas de duplication

Dri
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Elle est plutôt "déplacée" dans ce cas
Oui, c'est un mot plus approprié. Mais elle n'est pas "déplacée"... comment pourrait on dire ?
On perd les infos dans le prog principal...
Quand on rempli une liste, c' est pour travailler ensuite avec la liste...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

comment pourrait on dire ?
c'est un tres classique "swaping de pointeurs "
c'est une procedure tres classique ("ecole") , mais qu'il est bien de rapeler de temps en temps , c'est tres connu par les programeurs en C
et les anciens ayant connu GFA Basic ...

Merci a toi Erix14 de nous rapeller que l'on peut manipuler les pointeurs au lieu des variables... :D (je l'avais oublié)
Répondre