[ASP] Tableau à 2 dimensions

Tableau à 2 dimensions [ASP] - ASP - Programmation

Marsh Posté le 09-05-2003 à 07:49:56    

Bonjour
Voilà j'ai un petit problème. Jusqu'à présent j'ai réalisé le code pour afficher des images de mon répertoires, qui se présenteront sous la forme: 1.jpg, 10.jpg, 11.gif, 2.jpg, ...
 
J'ai mis le numéro de fichier dans un tableau, puis tri du dit tableau, et c'était dans la poche. Mais je n'avais pas prévu que l'extension pouvant être différente d'un fichier à l'autre, donc mon but est de stocker l'extension dans le tableau, mais à 2 dimensions cette fois.
 
Et je suis coincée, j'ai un peu tout essayé mais à chaque fois j'ai des erreurs de syntaxe :/ si qqun pouvait me donner un coup de main ca serait génial!
 
voici le code du tableau à 1 dimension (fonctionnel):

Code :
  1. dim table_fichier()
  2. enregistrement=0
  3. Set objFs = Server.CreateObject("Scripting.FileSystemObject" )
  4. chemin = Server.MapPath("./Public/" )
  5. set objDossier = objFs.getFolder(chemin)
  6. FOR each Fichier in objDossier.Files
  7.   redim preserve table_fichier(enregistrement)
  8.   table_fichier(enregistrement) = mid(Fichier.name,1,(instr(Fichier.name,"." )-1))
  9.   enregistrement=enregistrement+1
  10. NEXT
  11. ''Tri du tableau de noms des fichiers
  12. for i=0 to enregistrement-1
  13.   for j=i+1 to enregistrement-1
  14.     if CLng(table_fichier(j))<CLng(table_fichier(i)) then
  15.       temp=table_fichier(i)
  16.       table_fichier(i)=table_fichier(j)
  17.       table_fichier(j)=temp
  18.     end if
  19.   next
  20. next
  21. Set objFs = Nothing
  22. Set objDossier = Nothing


 
je vais réessayer de faire une série de tests, et je posterai un cas avec erreur plus tard. merci d'avance  :jap:


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 09-05-2003 à 07:49:56   

Reply

Marsh Posté le 09-05-2003 à 09:26:34    

déclaration d'un tableau de 10 lignes et 2 colonnes:
dim table_fichier(10,2)
 
pour le remplir :
redim table_fichier(enregistrement,2)
table_fichier(enregistrement,1)=numero
table_fichier(enregistrement,2)=extension
 
et en cadeau, une fonction que g fait avec mes petits doigts, elle trie le tableau :
 

Code :
  1. function trie_tableau (tableau , nb_ligne , nb_col , num_col , ordre)
  2. 'cette fonction trie un tableau de 2 dimensions en fonction de la colonne choisie, dans l'ordre choisi
  3. 'tableau : nom du tableau
  4. 'nb_ligne : nombre de ligne du tableau
  5. 'nb_col : nombre de colonne du tableau
  6. 'num_col : numero de la colonne qui doit etre triee
  7. 'ordre : 1 pour ordre croissant, 2 (ou n'importe quoi) pour ordre decroissant
  8. dim temp
  9. redim temp(nb_col)
  10. if ordre = 1 then
  11.  For i = 1 to nb_ligne
  12.   for j = 1 to i
  13.    If tableau(i,num_col) < tableau(j,num_col) Then
  14.     for h=1 to nb_col
  15.      temp(h) = tableau(i,h)
  16.     next
  17.     for h=1 to nb_col
  18.      tableau(i,h) = tableau(j,h)
  19.     next
  20.     for h=1 to nb_col
  21.      tableau(j,h) = temp(h)
  22.     next
  23.    end if
  24.   next
  25.  next
  26. else
  27.  For i = 1 to nb_ligne
  28.   for j = 1 to i
  29.    If tableau(i,num_col) > tableau(j,num_col) Then
  30.     for h=1 to nb_col
  31.      temp(h) = tableau(i,h)
  32.     next
  33.     for h=1 to nb_col
  34.      tableau(i,h) = tableau(j,h)
  35.     next
  36.     for h=1 to nb_col
  37.      tableau(j,h) = temp(h)
  38.     next
  39.    end if
  40.   next
  41.  next
  42. end if
  43. trie_tableau=tableau
  44. end function


Message édité par gilloux le 09-05-2003 à 09:29:32
Reply

Marsh Posté le 09-05-2003 à 09:34:07    

Juste comme ça, un petit truc en passe :
 
Gilloux > T'as oublié le preserve dans le redim :o
 
Urd-Sama > On ne peux redimensionner un tableau en VB que sur sa dernière dimension. C'est à dire que pour ton cas, si tu dois absolument redimensionner ton tableau à chaque insertion de ligne (ce qui ne doit se produire que quand on ne connaît pas à l'avance le nombre d'éléments), alors pose ton tableau sous forme de colonnes :
 
dim monTab()
redim preserve monTab(2, 1)
...
redim preserve monTab(2, 2)
...
redim preserve monTab(2, 3)
...
redim preserve monTab(2, 4)
 
etc.

Reply

Marsh Posté le 09-05-2003 à 09:37:37    

magicBuz > je crois qu'en asp tu peux redimensionner sur la première dimension, et sur celle que tu veux d'ailleur

Reply

Marsh Posté le 09-05-2003 à 09:55:53    

y'a une chose que je n'ai déjà pas du saisir avec les tableaux et l'asp.
je pensais avoir un tableau: tab(x,1) et non pas tab(x,x)
il se présente comme ceci:
 

Code :
  1. 0      1
  2.   ----------------
  3. 0  | 1 |  jpg     |
  4. 1  |10 |  jpg     |
  5. 2  |11 |  gif     |
  6. 3  | 2 |  jpg     |
  7. 4  | 3 |  jpg     |
  8. 5  | 4 |  gif     |
  9. x  | x |  xxx     |
  10.    ----------------


 
 
gilloux> je n'ai pas trop le temps d'étudier ta fonction pour l'instant, mais est-elle + efficace que ma fonction de tri? car ma fonction actuelle fonctionnerait et j'y comprend qqch, donc à moins qu'elle soit vraiment plus efficace (notamment en temps d'exécution) je préfère garder la mienne. Mais merci tout de meme beaucoup pour ton exemple


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 09-05-2003 à 10:14:07    

gilloux a écrit :

magicBuz > je crois qu'en asp tu peux redimensionner sur la première dimension, et sur celle que tu veux d'ailleur


Bah ça doit dépendre des versions alors, parceque moi ça a toujours planté :)
 
Attends, je teste...

Reply

Marsh Posté le 09-05-2003 à 10:16:12    

Code :
  1. dim toto()
  2. redim toto(4, 2)
  3. redim preserve toto(4, 8)
  4. redim preserve toto(8, 8)


 

Citation :

Microsoft VBScript runtime error '800a0009'  
 
Subscript out of range  
 
/computer/default.asp, line 46


 
Ca correspond à la dernière ligne, lorsque je modifie la premioère dimension.
 
IIS 6.2 sous Windows 2003 Server donc on peut pas faire plus récent ;)


Message édité par MagicBuzz le 09-05-2003 à 10:16:48
Reply

Marsh Posté le 09-05-2003 à 10:19:06    

PS : OK, si on ne fait pas de preserve, alors on peut redimensionner dans tous les sens (en fait, c'et logique, puisqu'on détruit le tableau et qu'on le reconstruit).
 
Mais bon, je me sert jamais du redim sans preserve pour redimensionner des tableaux, parceque vu que ça le vide intégralement, je préfère m'embêter à bosser en colonnes plutôt que de re-remplir le tableau de A à Z à chaque ajout de ligne ;)
 
Extrait de la MSDN :

Citation :

If you use the Preserve keyword, you can resize only the last array dimension, and you can't change the number of dimensions at all. For example, if your array has only one dimension, you can resize that dimension because it is the last and only dimension. However, if your array has two or more dimensions, you can change the size of only the last dimension and still preserve the contents of the array.


Message édité par MagicBuzz le 09-05-2003 à 10:20:44
Reply

Marsh Posté le 09-05-2003 à 10:29:40    

urd-sama > quand tu écrit

Code :
  1. 0      1
  2. ----------------
  3. 0  | 1 |  jpg     |
  4. 1  |10 |  jpg     |
  5. 2  |11 |  gif     |
  6. 3  | 2 |  jpg     |
  7. 4  | 3 |  jpg     |
  8. 5  | 4 |  gif     |
  9.   ----------------

 
c un tableau à 2 colonnes et 6 lignes -> tab(6,2) ou tab(2,6) (pour magicBuzz)
 
ma fonction, elle est pas + compliquée que la tienne, sauf qu'elle trie en ordre croissant et décroissant, et qu'elle fait attention à trier les lignes dans leur globalité (il faut que les colonnes restent apariées)
 
magicBuzz > ok je me rend compte que j'utilisais pas le preserve car je calculais la taille et ensuite je remplissais les lignes
donc mon redim tab(taille,12) fonctionnait

Reply

Marsh Posté le 13-05-2003 à 07:51:55    

gilloux a écrit :


c un tableau à 2 colonnes et 6 lignes -> tab(6,2) ou tab(2,6) (pour magicBuzz)


*illumination*
je viens de comprendre qu'il faut que j'inverse mon tableau, selon les dire de buzz (ligne-colonne au lieu de colonne-ligne).
je vais essayer de regarder ca aujourd'hui si j'ai le temps, en tout cas déjà un grand merci.
je garde ta fonction au chaud gilloux, au cas ou j'en aurais besoin un jour, merci beaucoup du cado


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 13-05-2003 à 07:51:55   

Reply

Marsh Posté le 13-05-2003 à 08:11:43    

youpie ca marche  [:volta]  
vraiment un grand merci, j'y serai jamais arrivé sans votre aide!
et le code pour ceux que ca intéresse:
 

Code :
  1. <%
  2. dim table_fichier()
  3. enregistrement=0
  4. Set objFs = Server.CreateObject("Scripting.FileSystemObject" )
  5. chemin = Server.MapPath("./Public/" )
  6. set objDossier = objFs.getFolder(chemin)
  7. FOR each Fichier in objDossier.Files
  8.   redim preserve table_fichier(2,enregistrement)
  9.   table_fichier(2,enregistrement) = mid(Fichier.name,1,(instr(Fichier.name,"." )-1))
  10.   table_fichier(1,enregistrement) = mid(Fichier.name,(instr(Fichier.name,"." ))+1)
  11.   enregistrement=enregistrement+1
  12. NEXT
  13. ''Tri du tableau de noms des fichiers
  14. for i=0 to enregistrement-1
  15.   for j=i+1 to enregistrement-1
  16.     if CLng(table_fichier(2,j))<CLng(table_fichier(2,i)) then
  17.       tempint=table_fichier(2,i)
  18.       tempchar=table_fichier(1,i)
  19.       table_fichier(2,i)=table_fichier(2,j)
  20.       table_fichier(1,i)=table_fichier(1,j)
  21.       table_fichier(2,j)=tempint
  22.       table_fichier(1,j)=tempchar
  23.     end if
  24.   next
  25. next
  26. Set objFs = Nothing
  27. Set objDossier = Nothing
  28. FOR i = 0 to enregistrement-1
  29.   %>
  30.   <div class="vignette"><a href="Public/<%=table_fichier(2,i) & "." & table_fichier(1,i)%>" target="_blank"><img class="vignette" src="Public/<%=table_fichier(2,i) & "." & table_fichier(1,i)%>" alt="<%=table_fichier(2,i) & "." & table_fichier(1,i)%>"></a></div>
  31.   <%
  32. NEXT
  33. %>


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 01-03-2005 à 09:54:48    

A ce propos, en ASP, l'écriture suivante pour un tableau à 2 dimension est valable :
 

Code :
  1. tab(1,1) = "test"


 
Mais cette écriture est-elle correcte et fait-elle la même chose ?
 

Code :
  1. tab(1)(1) = "test"


 
Merci  :jap:


---------------
Marre de perdre du temps à chercher vos sous titres ? | HFR4droid
Reply

Marsh Posté le 16-03-2005 à 08:39:02    

Bonjour, bonjour,
 
Mon problème à moi c'est que j'essaye depuis deux jours toutes les fonctions que je trouve en vbscript pour trier mon tableau (en fait, que deux) et j'ai toujours la même erreur : type incompatible.
 
Voilà les éléments principaux :
je reprend la fonction trie_tableau présentée plus haut
 
dim arr_del_moy(5,4)
 
arr_del_moy(0,0) = "4.93"
arr_del_moy(0,1) = "4.70"
arr_del_moy(0,2) = "4.64"
arr_del_moy(0,3) = "5.45"
arr_del_moy(0,4) = "4.26"
                         
arr_del_moy(1,0) = "6.64"
arr_del_moy(1,1) = "5.28"
arr_del_moy(1,2) = "5.06"
arr_del_moy(1,3) = "6.37"
arr_del_moy(1,4) = "5.47"
                         
arr_del_moy(2,0) = "5.40"
arr_del_moy(2,1) = "5.31"
arr_del_moy(2,2) = "5.89"
arr_del_moy(2,3) = "5.29"
arr_del_moy(2,4) = "5.10"
                         
arr_del_moy(3,0) = "6.74"
arr_del_moy(3,1) = "6.32"
arr_del_moy(3,2) = "6.56"
arr_del_moy(3,3) = "5.77"
arr_del_moy(3,4) = "7.46"
                         
arr_del_moy(4,0) = "5.37"
arr_del_moy(4,1) = "5.61"
arr_del_moy(4,2) = "5.37"
arr_del_moy(4,3) = "5.80"
arr_del_moy(4,4) = "5.90"
                         
arr_del_moy(5,0) = "3.76"
arr_del_moy(5,1) = "4.73"
arr_del_moy(5,2) = "4.47"
arr_del_moy(5,3) = "5.29"
arr_del_moy(5,4) = "4.14"
 
 
arr_del_moy = trie_tableau(arr_del_moy,5,4,1,1)
 
 
et c'est là que ça plante, sur le  
arr_del_moy = trie_tableau(arr_del_moy,5,4,1,1)
 
Erreur d'exécution Microsoft VBScript error '800a000d'  
 
Type incompatible  
 
Et franchement : :fou:  :fou:  :fou:  je craque !!!
 
Nulle part on dit que les fonctions que j'essaie d'appliquer ne marche pas. Alors quoi ? quel est le problème ?
 
Merci d'avance pour votre aide ou votre soutien  :pt1cable:  
 
Cathy
 


---------------
Votre aide me fera constamment avancer dans ma quête de savoir... merci, merci, merci
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed