Un code tout simple d'inversion de sélection qui devrait marcher, sauf si
j'ai raté qq. chose mais il ne fonctionne pas, mes lignes ne sont pas
sélectionnées:
---------------------------------------------------------------------------------------------------------
// Déclarations
leIndice est un entier
// Zone mémoire
MemCrée("MemTemp")
// Mémorisation des sélections
POUR leIndice=1 A TableSelectOccurrence(psTable)
MemAjoute("MemTemp",MemOccurrence("MemTemp")+1,TableSelect(psTable,leIndice))FIN// DéselectionTableSelectMoins(psTable)// Inversion de la sélectionPOUR leIndice=1 A TableOccurrence(psTable) SI MemRecherche("MemTemp",leIndice,Faux)=-1 ALORS TableSelectPlus(psTable,leIndice) FINFIN// FinMemSupprimeTout("MemTemp")---------------------------------------------------------------------------------------------------------Il refuse obstinément de me sélectionner + lignes !!!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles TOURREAU
Philippe avait soumis l'idée :
Bonjour,
Un code tout simple d'inversion de sélection qui devrait marcher, sauf si j'ai raté qq. chose mais il ne fonctionne pas, mes lignes ne sont pas sélectionnées:
--------------------------------------------------------------------------------------------------------- // Déclarations leIndice est un entier
// Zone mémoire MemCrée("MemTemp")
// Mémorisation des sélections POUR leIndice=1 A TableSelectOccurrence(psTable)
MemAjoute("MemTemp",MemOccurrence("MemTemp")+1,TableSelect(psTable,leIndice))FIN// DéselectionTableSelectMoins(psTable)// Inversion de la sélectionPOUR leIndice=1 A TableOccurrence(psTable) SI MemRecherche("MemTemp",leIndice,Faux)=-1 ALORS TableSelectPlus(psTable,leIndice) FINFIN// FinMemSupprimeTout("MemTemp")---------------------------------------------------------------------------------------------------------Il refuse obstinément de me sélectionner + lignes !!!
Je n'arrive pas à lire ton algo... Au lieu d'utiliser les zone mémoires qui sont plus lent à manipuler, utiliser les tableaux dynamique :
///////////////////////////////////////////
leIndice est un entier
tbl est un tableau dynamique tbl = allouer un tableau de 0 entiers
POUR leIndice=1 A TableSelectOccurrence(Table1) TableauAjoute(tbl, TableSelect(Table1, leIndice)) FIN
POUR leIndice=1 A TableOccurrence(Table1) SI TableauCherche(tbl, tcLinéaire, leIndice) = -1 ALORS TableSelectPlus(Table1, leIndice) SINON TableSelectMoins(Table1, leIndice) FIN FIN
libérer tbl
///////////////////////////////////////////
Cordialement
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Philippe avait soumis l'idée :
Bonjour,
Un code tout simple d'inversion de sélection qui devrait marcher, sauf si
j'ai raté qq. chose mais il ne fonctionne pas, mes lignes ne sont pas
sélectionnées:
---------------------------------------------------------------------------------------------------------
// Déclarations
leIndice est un entier
// Zone mémoire
MemCrée("MemTemp")
// Mémorisation des sélections
POUR leIndice=1 A TableSelectOccurrence(psTable)
MemAjoute("MemTemp",MemOccurrence("MemTemp")+1,TableSelect(psTable,leIndice))FIN//
DéselectionTableSelectMoins(psTable)// Inversion de la sélectionPOUR
leIndice=1 A TableOccurrence(psTable) SI
MemRecherche("MemTemp",leIndice,Faux)=-1 ALORS
TableSelectPlus(psTable,leIndice) FINFIN//
FinMemSupprimeTout("MemTemp")---------------------------------------------------------------------------------------------------------Il
refuse obstinément de me sélectionner + lignes !!!
Je n'arrive pas à lire ton algo...
Au lieu d'utiliser les zone mémoires qui sont plus lent à manipuler,
utiliser les tableaux dynamique :
///////////////////////////////////////////
leIndice est un entier
tbl est un tableau dynamique
tbl = allouer un tableau de 0 entiers
POUR leIndice=1 A TableSelectOccurrence(Table1)
TableauAjoute(tbl, TableSelect(Table1, leIndice))
FIN
POUR leIndice=1 A TableOccurrence(Table1)
SI TableauCherche(tbl, tcLinéaire, leIndice) = -1 ALORS
TableSelectPlus(Table1, leIndice)
SINON
TableSelectMoins(Table1, leIndice)
FIN
FIN
Un code tout simple d'inversion de sélection qui devrait marcher, sauf si j'ai raté qq. chose mais il ne fonctionne pas, mes lignes ne sont pas sélectionnées:
--------------------------------------------------------------------------------------------------------- // Déclarations leIndice est un entier
// Zone mémoire MemCrée("MemTemp")
// Mémorisation des sélections POUR leIndice=1 A TableSelectOccurrence(psTable)
MemAjoute("MemTemp",MemOccurrence("MemTemp")+1,TableSelect(psTable,leIndice))FIN// DéselectionTableSelectMoins(psTable)// Inversion de la sélectionPOUR leIndice=1 A TableOccurrence(psTable) SI MemRecherche("MemTemp",leIndice,Faux)=-1 ALORS TableSelectPlus(psTable,leIndice) FINFIN// FinMemSupprimeTout("MemTemp")---------------------------------------------------------------------------------------------------------Il refuse obstinément de me sélectionner + lignes !!!
Je n'arrive pas à lire ton algo... Au lieu d'utiliser les zone mémoires qui sont plus lent à manipuler, utiliser les tableaux dynamique :
///////////////////////////////////////////
leIndice est un entier
tbl est un tableau dynamique tbl = allouer un tableau de 0 entiers
POUR leIndice=1 A TableSelectOccurrence(Table1) TableauAjoute(tbl, TableSelect(Table1, leIndice)) FIN
POUR leIndice=1 A TableOccurrence(Table1) SI TableauCherche(tbl, tcLinéaire, leIndice) = -1 ALORS TableSelectPlus(Table1, leIndice) SINON TableSelectMoins(Table1, leIndice) FIN FIN
libérer tbl
///////////////////////////////////////////
Cordialement
-- Gilles TOURREAU Responsable informatique
Société P.O.S Spécialiste en motoculture depuis + de 30 ans ! http://www.pos.fr
Philippe
Merci.
Mais le problème est aléatoire des fois ca marche des fois pas. Encore une bizarrerie Windev :)
Merci.
Mais le problème est aléatoire des fois ca marche des fois pas. Encore une
bizarrerie Windev :)
Mais le problème est aléatoire des fois ca marche des fois pas. Encore une bizarrerie Windev :)
fait un tabletri(matable,faux) en début de traitement....
Vbig
> Je n'arrive pas à lire ton algo... Au lieu d'utiliser les zone mémoires qui sont plus lent à manipuler, utiliser les tableaux dynamique :
Scusez, je ne répond pas à la question
Celà fait plusieurs fois que je lis que les tableaux sont plus rapide que les zones memoire.
J'utilise wd depuis la version 5, et n'ayant pas alors les fonctions de tri et recherche sur les tableaux, les zones mémoire était plus adéquate pour ce genre de traitement.
Maintenant avec les nouvelles fonctions sur les tableaux, ma solution n'est peut être pas la plus rapide alors j'ai refais les test :
En création / ajout => Il n'y a pas photo, la zone mémoire est plus rapide En tris => Le tableau gagne En recherche => dépend du contenu et des valeur recherchées, la recherche dans les tableaux est parfois plus rapide, parfois plus lente. La recherche dans la zone memoire est plus constante.
De plus, le principe des zones mémoires permet de conserver une valeur de retour et une clé. Je ne vois pas bien comment faire celà avec les tableaux. En gros, je reste avec les zones mémoires :)
extrait de l'analyseur de performance, j'ai pas été mechant, ce ne sont que des entiers que je manipulais
MemAjoute() ,100000,456 ms TableauAjoute(),100000,1 s 47 ms
MemTrie() ,1 ,120 ms TableauTrie() ,1 ,16 ms
MemRecherche() ,4 ,66 µs TableauCherche(),4 ,1 ms
total pour les zone memoire : 0s576ms66 total pour les tableaux : 1s061ms00
mon code de test : wj,wi,wk est un entier wres est un entier AnalyseurDébut("c:test.wpf") MemCree("zmem") POUR wi=1 A 100000 MemAjoute("zmem",100000-wi,wi) FIN MemTrie("zmem") wres=MemRecherche("zmem",500) wres=MemRecherche("zmem",9999) wres=MemRecherche("zmem",10000) wres=MemRecherche("zmem",98988) tbl est un tableau dynamique tbl = allouer un tableau de 0 entiers POUR wi=1 A 100000 TableauAjoute(tbl,100000-wi) FIN TableauTrie(tbl,ttCroissant) wres=TableauCherche(tbl,tcLinéairePremier,500) wres=TableauCherche(tbl,tcLinéairePremier,999) wres=TableauCherche(tbl,tcLinéairePremier,10000) wres=TableauCherche(tbl,tcLinéairePremier,98988) AnalyseurFin() MemSupprimetout("zmem") liberer tbl
>
Je n'arrive pas à lire ton algo...
Au lieu d'utiliser les zone mémoires qui sont plus lent à manipuler, utiliser
les tableaux dynamique :
Scusez, je ne répond pas à la question
Celà fait plusieurs fois que je lis que les tableaux sont plus rapide
que les zones memoire.
J'utilise wd depuis la version 5, et n'ayant pas alors les fonctions de
tri et recherche sur les tableaux, les zones mémoire était plus
adéquate pour ce genre de traitement.
Maintenant avec les nouvelles fonctions sur les tableaux, ma solution
n'est peut être pas la plus rapide alors j'ai refais les test :
En création / ajout => Il n'y a pas photo, la zone mémoire est plus
rapide
En tris => Le tableau gagne
En recherche => dépend du contenu et des valeur recherchées, la
recherche dans les tableaux est parfois plus rapide, parfois plus
lente. La recherche dans la zone memoire est plus constante.
De plus, le principe des zones mémoires permet de conserver une valeur
de retour et une clé. Je ne vois pas bien comment faire celà avec les
tableaux.
En gros, je reste avec les zones mémoires :)
extrait de l'analyseur de performance,
j'ai pas été mechant, ce ne sont que des entiers que je manipulais
MemAjoute() ,100000,456 ms
TableauAjoute(),100000,1 s 47 ms
MemTrie() ,1 ,120 ms
TableauTrie() ,1 ,16 ms
MemRecherche() ,4 ,66 µs
TableauCherche(),4 ,1 ms
total pour les zone memoire : 0s576ms66
total pour les tableaux : 1s061ms00
mon code de test :
wj,wi,wk est un entier
wres est un entier
AnalyseurDébut("c:test.wpf")
MemCree("zmem")
POUR wi=1 A 100000
MemAjoute("zmem",100000-wi,wi)
FIN
MemTrie("zmem")
wres=MemRecherche("zmem",500)
wres=MemRecherche("zmem",9999)
wres=MemRecherche("zmem",10000)
wres=MemRecherche("zmem",98988)
tbl est un tableau dynamique
tbl = allouer un tableau de 0 entiers
POUR wi=1 A 100000
TableauAjoute(tbl,100000-wi)
FIN
TableauTrie(tbl,ttCroissant)
wres=TableauCherche(tbl,tcLinéairePremier,500)
wres=TableauCherche(tbl,tcLinéairePremier,999)
wres=TableauCherche(tbl,tcLinéairePremier,10000)
wres=TableauCherche(tbl,tcLinéairePremier,98988)
AnalyseurFin()
MemSupprimetout("zmem")
liberer tbl
> Je n'arrive pas à lire ton algo... Au lieu d'utiliser les zone mémoires qui sont plus lent à manipuler, utiliser les tableaux dynamique :
Scusez, je ne répond pas à la question
Celà fait plusieurs fois que je lis que les tableaux sont plus rapide que les zones memoire.
J'utilise wd depuis la version 5, et n'ayant pas alors les fonctions de tri et recherche sur les tableaux, les zones mémoire était plus adéquate pour ce genre de traitement.
Maintenant avec les nouvelles fonctions sur les tableaux, ma solution n'est peut être pas la plus rapide alors j'ai refais les test :
En création / ajout => Il n'y a pas photo, la zone mémoire est plus rapide En tris => Le tableau gagne En recherche => dépend du contenu et des valeur recherchées, la recherche dans les tableaux est parfois plus rapide, parfois plus lente. La recherche dans la zone memoire est plus constante.
De plus, le principe des zones mémoires permet de conserver une valeur de retour et une clé. Je ne vois pas bien comment faire celà avec les tableaux. En gros, je reste avec les zones mémoires :)
extrait de l'analyseur de performance, j'ai pas été mechant, ce ne sont que des entiers que je manipulais
MemAjoute() ,100000,456 ms TableauAjoute(),100000,1 s 47 ms
MemTrie() ,1 ,120 ms TableauTrie() ,1 ,16 ms
MemRecherche() ,4 ,66 µs TableauCherche(),4 ,1 ms
total pour les zone memoire : 0s576ms66 total pour les tableaux : 1s061ms00
mon code de test : wj,wi,wk est un entier wres est un entier AnalyseurDébut("c:test.wpf") MemCree("zmem") POUR wi=1 A 100000 MemAjoute("zmem",100000-wi,wi) FIN MemTrie("zmem") wres=MemRecherche("zmem",500) wres=MemRecherche("zmem",9999) wres=MemRecherche("zmem",10000) wres=MemRecherche("zmem",98988) tbl est un tableau dynamique tbl = allouer un tableau de 0 entiers POUR wi=1 A 100000 TableauAjoute(tbl,100000-wi) FIN TableauTrie(tbl,ttCroissant) wres=TableauCherche(tbl,tcLinéairePremier,500) wres=TableauCherche(tbl,tcLinéairePremier,999) wres=TableauCherche(tbl,tcLinéairePremier,10000) wres=TableauCherche(tbl,tcLinéairePremier,98988) AnalyseurFin() MemSupprimetout("zmem") liberer tbl