Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Une curiosité... | |
| | Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Une curiosité... Ven 19 Oct 2012 - 6:33 | |
| Cherchez le "1"... - Code:
-
Make_Grid(1,10,4) grid_save 1,10,4,"Grid.txt" pause 5000 Row_Delete(1,"1")
end ' ------------------------------------------------------------------------------ sub Make_Grid(No%,R%,C%) dim_local L% grid No% grid_row No%,R% :grid_column No%,C% for L%=1 to R%:grid_write No%,L%,1,str$(L%):next L% End_Sub ' ------------------------------------------------------------------------------ sub Row_Delete(No%,Item$) if object_exists(2)=0 Then Dlist 2 file_load 2,"Grid.txt" Dim_Local x%,y%,R%,C%,i$ R%=Val(item_read$(2,1)) : C%=Val(Item_read$(2,2)) : x%=0 : y%=0 While x% < count(2) x%=x%+1 i$=item_read$(2,x%) if Item$=i$ Then Exit_While End_While
R%=R%-1 Item_Delete 2,1 Item_Insert 2,1,Str$(R%)
for y%=0 to C%-1 Item_Delete 2,x%+y% Next y% file_save 2,"Grid.txt"
grid_row No%,R% grid_load No%,"Grid.txt" End_Sub | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 19 Oct 2012 - 11:06 | |
| Pas de commentaires ?... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une curiosité... Ven 19 Oct 2012 - 12:00 | |
| Tu fais une erreur d'adressage au moment de la suppression des lignes dans la DLIST. Regarde ta procédure modifiée: - Code:
-
sub Row_Delete(No%,Item$) if object_exists(2)=0 Then Dlist 2 file_load 2,"Grid.txt" Dim_Local x%,y%,R%,C%,i$ R%=Val(item_read$(2,1)) : C%=Val(Item_read$(2,2)) : x%=0 : y%=0 While x% < count(2) x%=x%+1 i$=item_read$(2,x%) if Item$=i$ Then Exit_While End_While message str$(x%)
R%=R%-1 Item_Delete 2,1 Item_Insert 2,1,Str$(R%)
for y%=0 to C%-1 Item_Delete 2,x% : ' + y% <=== le problème est ici ! Next y% file_save 2,"Grid.txt"
grid_row No%,R% grid_load No%,"Grid.txt" End_Sub Explication: dans ta boucle, pour l'indice y%=0, tu supprimes la ligne 3. La ligne 4 devient alors la ligne 3 et ainsi de suite. Or, tu supprimes ensuite la ligne 4 qui était l'ancienne ligne 5, etc. Si tu avais chargé les autres cellules de chaque ligne, tu aurais vu le problème immédiatement. Il suffit de supprimer la ligne dont l'indice est trouvé par la boucle de recherches autant de fois que tu as de colonnes. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 19 Oct 2012 - 14:04 | |
| @ Klaus, Bien vue ! j' avais zappé le fais sur la boucle for... next chaque ligne était remontée. Je corrige dans mon source et du coup celà donne cette procedure : - Code:
-
Make_Grid(1,10,4) grid_save 1,10,4,"Grid.txt" pause 5000 Row_Delete(1,"1")
end ' ------------------------------------------------------------------------------ sub Make_Grid(No%,R%,C%) dim_local L% grid No% grid_row No%,R% :grid_column No%,C% for L%=1 to R%:grid_write No%,L%,1,str$(L%):next L% End_Sub ' ------------------------------------------------------------------------------ sub Row_Delete(No%,Item$) if object_exists(2)=0 Then Dlist 2 file_load 2,"Grid.txt" Dim_Local x%,y%,R%,C%,i$ R%=Val(item_read$(2,1)) : C%=Val(Item_read$(2,2)) : x%=0 : y%=0 While x% < count(2) x%=x%+1 i$=item_read$(2,x%) if Item$=i$ Then Exit_While End_While
R%=R%-1 Item_Delete 2,1 Item_Insert 2,1,Str$(R%)
for y%=1 to C% Item_Delete 2,x% Next y% file_save 2,"Grid.txt"
grid_row No%,R% grid_load No%,"Grid.txt" End_Sub
pour supprimer une ligne du grid . PS : a condition de se servir des commandes Grid_Save et Grid_load | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une curiosité... Ven 19 Oct 2012 - 14:18 | |
| Mais attention ! Dans ta procédure de suppression, tu supprimes C% lignes dès que tu rencontres item$ dans n'importe quelle cellule du grid (ligne du fichier) ! Et cela va de bousiller ton tableau si tu trouves l'information dans de 3ème cellule d'une ligne, par exemple, car tu détruiras la troisième et 4ème, puis la première et la 2ème de la ligne suivante ! De plus, pour la recherche, il faut dépasser les deux premières lignes qui sont réservées. La version suivante ne fait le test que sur la première cellule d'une ligne: - Code:
-
sub Row_Delete(No%,Item$) if object_exists(2)=0 Then Dlist 2 file_load 2,"Grid.txt" Dim_Local x%,y%,R%,C%,i$ R%=Val(item_read$(2,1)) : C%=Val(Item_read$(2,2)) : x%=0 : y%=0 x% = 2 : ' <======= pour dépasser les 2 premières lignes !!!!!!!! While x% < count(2) i$=item_read$(2,x%) if Item$=i$ Then Exit_While x%=x%+C% : ' <======== !!!!!!!! End_While
R%=R%-1 Item_Delete 2,1 Item_Insert 2,1,Str$(R%)
for y%=1 to C% Item_Delete 2,x% Next y% file_save 2,"Grid.txt"
grid_row No%,R% grid_load No%,"Grid.txt" End_Sub
Et cette version détruit toutes les cellules d'une même ligne, même si l'on trouve l'info dans une autre cellule que la première: - Code:
-
sub Row_Delete(No%,Item$) if object_exists(2)=0 Then Dlist 2 file_load 2,"Grid.txt" Dim_Local x%,y%,R%,C%,i$ R%=Val(item_read$(2,1)) : C%=Val(Item_read$(2,2)) : x%=0 : y%=0 x% = 2 : ' <======= pour dépasser les 2 premières lignes !!!!!!!! While x% < count(2) y% = 0 : ' <======= while y%<C% : ' <======= i$=item_read$(2,x%+y%) if Item$=i$ Then Exit_While end_while : ' <======= x%=x%+C% : ' <======= !!!!!!!! End_While
R%=R%-1 Item_Delete 2,1 Item_Insert 2,1,Str$(R%)
for y%=1 to C% Item_Delete 2,x% Next y% file_save 2,"Grid.txt"
grid_row No%,R% grid_load No%,"Grid.txt" End_Sub
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 19 Oct 2012 - 18:02 | |
| Effectivement dans ma procédure je cherchais un éléments de la première colonne pour la comparaison et je faisais toutes les cases de la ligne dont la comparaison était "true" Je cherchais à faire une procédure en me basant sur mes besoins et j'ai pas pris en compte que l'on puis avoir deux fiches de nom identique ( quasi impossible avec des chevaux ) où que l'on cherche à éliminer une fiche de part une de ses données. Je me raviserai en disant que c'est une base de réflexion... | |
| | | Contenu sponsorisé
| Sujet: Re: Une curiosité... | |
| |
| | | | Une curiosité... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |