Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1223 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  définir une taille pour mon array

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

définir une taille pour mon array

n°2125248
misato
Clavicula Nox
Posté le 07-02-2012 à 20:15:00  profilanswer
 

bonjour,

 

j'ai un script VBS qui prends un fichier texte en entrée, et me stocke chaque chaine de caractère du fichiers dans un tableau.
j'ai défini mon tableau en faisant arrTest(50), donc mon tableau comporte 51 valeurs.
j'ai un indice indTest que je mets à zéro au début, et que j'incrémente (logique :o) dans mes traitements.
si jamais mon indTest dépasse 50, je wscript.quit avec une erreur.

 

le problème, c que j'aimerais bien faire un truc plus propre, avec une constante que je déclarerai pour donner la taille des tableaux (oui car en fait j'en ai 4 en tout, des tableaux, et 2 indices car je gère mes tableaux par paires)

 

donc un truc style

 

Const TAILLE_MAX As Integer = 50 '// sauf qu'avec un peu de chance le As Integer n'est pas valide en vbs :whistle: !
Dim arrTest(TAILLE_MAX) '// et mes autres tableaux mais bref OSEF

 

quand je lance ça, il me dit qu'il attends une constante à la ligne 2, caractère 13 :/

 

le reste du script marche parfaitement et fait exactement ce que je veux qu'il fasse (enfin pour le moment je teste l'affichage des différentes variables que je manipule au lieu de créer les utilisateurs, mais ça ne saurait tarder :o)

 

ya moyen de faire ça, ou avec tous les Redim Preserve que j'ai vu dans la littérature, il est incongru de vouloir utiliser une constante de taille de tableau en VBS :gratgrat: ?

 

merci :jap:


Message édité par misato le 07-02-2012 à 20:16:43

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
mood
Publicité
Posté le 07-02-2012 à 20:15:00  profilanswer
 

n°2125338
mmarle
Posté le 08-02-2012 à 11:13:39  profilanswer
 

Bonjour misato,
 
Ne manque-t-il pas une déclaration dans la variable tableau?
 

Code :
  1. Const TAILLE_MAX As Integer = 50 '// sauf qu'avec un peu de chance le As Integer n'est pas valide en vbs :whistle: !
  2. Dim arrTest(TAILLE_MAX) '// et mes autres tableaux mais bref OSEF


 
Du genre:
 

Code :
  1. Const TAILLE_MAX As Integer = 50 '// sauf qu'avec un peu de chance le As Integer n'est pas valide en vbs :whistle: !
  2. Dim arrTest(TAILLE_MAX) As String '// et mes autres tableaux mais bref OSEF


 
Où bien encore:
 

Code :
  1. Const TAILLE_MAX As Integer = 50 '// sauf qu'avec un peu de chance le As Integer n'est pas valide en vbs :whistle: !
  2. Dim arrTest() As String '// et mes autres tableaux mais bref OSEF
  3. ReDim arrTest(TAILLE_MAX)


 
A tester!

n°2125394
SuppotDeSa​Tante
Aka dje69r
Posté le 08-02-2012 à 14:04:43  profilanswer
 

Mais pourquoi utiliser une constante ?
 

Code :
  1. Taille_Max = 50
  2. Dim arrTest(Taille_Max)


 
Sinon, en effet tu peux utiliser ReDim dès que tu dépasses 51.

Code :
  1. ReDim Preserve arrTest(Taille_Max + x)
  2. 'ou x est la valeur que tu veux ajouter. Si tu es dans une boucle, un +1 devrait le faire.


 


---------------
Soyez malin, louez entre voisins !
n°2125479
misato
Clavicula Nox
Posté le 08-02-2012 à 19:19:08  profilanswer
 

merci pour vos réponses :jap: !

 

alors, c'est du vbscript pour de la gestion active directory, donc je sais pas trop si il appréciera les Dim <variable> As <type> (me semble avoir vu que c'était pas pris en charge en VBS, uniquement VB/VBA), mais j'essaierai voir ce que mmarie propose demain. (vais ptet pouvoir tester tout de suite sur mon PC perso, tiens :gratgrat:)

 

pour dje69r, disons que les traitements derrières sont déjà assez compliqués (ya 4 tableaux à gérer 2 par 2, donc, et je chope les lettres de début et de fin de chaque chaine de chaque tableau pour faire des traitements à base de case select ... qu'il faut que je répète après une pause le temps que l'AD prenne en compte la création des user, en gros), et j'ai pas envie de m'embéter à traiter ça autrement qu'avec une sortie violente en cas de dépassement de taille :o

 

la question serait aussi de savoir combien ça coute en terme CPU un Redim Preserve. si j'en fait 50 alors que je suis sur mon controleur de domaine qui gère toute la France (plusieurs milliers de personne rien qu'au service info, j'ai pas de visibilité sur la totalité de l'effectif :D), et que je le plante ou le rends indisponible :sweat: ...

 

edit : la méthode en 3 temps marche \o/ ! ... pourquoi j'y ai pas pensé plus tot :/ ? (et donc, le "As <type>" me fait une erreur style "fin d'instruction attendue" ...)

 

bon, maintenant, en fait je vais ptet faire un truc style la taille à 25, et si je dépasse, je redim sur 25 de plus, et ainsi de suite :D ... histoire de pas faire trop de redim preserve :o


Message édité par misato le 08-02-2012 à 19:32:03

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2125488
SuppotDeSa​Tante
Aka dje69r
Posté le 08-02-2012 à 19:53:06  profilanswer
 

Citation :

pour dje69r, disons que les traitements derrières sont déjà assez compliqués (ya 4 tableaux à gérer 2 par 2, donc, et je chope les lettres de début et de fin de chaque chaine de chaque tableau pour faire des traitements à base de case select ... qu'il faut que je répète après une pause le temps que l'AD prenne en compte la création des user, en gros), et j'ai pas envie de m'embéter à traiter ça autrement qu'avec une sortie violente en cas de dépassement de taille


je ne vois pas le rapport. Une constante, d'ou son nom c'est sensé etre constant. Or, toi ca varie. Je te dis donc de passer par une variable.
Apres je ne sais pas ce que tu stocke, mais un Redim de 50 a 100 valeurs sur un tableau a une dimension, ca prend pas grand chose niveau ressource...
 
Sinon, des attaques d'AD via WMI en VBS j'en ai bouffé, pas eu de souci pour declarer une variable typee.


---------------
Soyez malin, louez entre voisins !
n°2125495
misato
Clavicula Nox
Posté le 08-02-2012 à 20:29:13  profilanswer
 

bon :gratgrat: ...

 

pour le moment, 50 c plus ou moins le double de ce que j'ai eu de plus gros ... j'ai juste un peu peur qu'un traitement automatique sur autant de données soit juste pas normal, mon boulot c pas de faciliter ce genre de traitement, c de savoir s'il faut l'autoriser, à la base :D - accessoirement, j'avais quasiment jamais fait de VBS il y a moins de 2 semaines :D ... j'ai donc des appréhensions pour le moment :D

 

mais en gros, c juste de la paresse, si tu veux :D

 

et donc, quand tu déclares une constante dans un fichier VBS que tu double-cliques dessus, il t'envoie pas chier quand tu fais un dim <variable> as <type> :gratgrat:

 

si je met un "= <valeur>" il me dit qu'il attendait une valeur au niveau du "as", si je mets rien, il me dit qu'il attendait une fin d'instruction (toujours sur le "as" ) :gratgrat: ... m'enfin bref, pour le moment il se débrouille très bien tout seul :lol: !


Message édité par misato le 08-02-2012 à 20:38:24

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
n°2125548
mmarle
Posté le 09-02-2012 à 09:00:16  profilanswer
 

Bonjour,
 
En fait le mieux c'est de redimensionner la variable tableau sur l'étendue d'une classe.
Par exemple, sur Excel, on pourrait utiliser la propriété "Count" de la collection "Sheets", le but est de toujours mettre à jour la variable et au revoir l'erreur!
 

Code :
  1. Dim ValMax As Integer
  2. ValMax= Sheets.Count
  3. Dim MyTab() As String
  4. Redim Mytab(ValMax)
  5. Dim i as integer
  6. Dim MyMessage as String
  7. For i= 0 to ValMax-1
  8.    MyTab(i)=Sheets(i+1).Name
  9.    MyMessage= MyMessage & VbLf & i & " - " & MyTab(i)
  10. Next i
  11. MsgBox MyMessage


 
Dans cet exemple on stock le nom des feuilles et on les réitère dans une MsgBox. La variable MyTab() est systématiquement redimensionnée quelque soit le nombre de feuille ajoutée ou supprimée.
Ceci marche très bien en VB/VBA.
 

n°2125564
SuppotDeSa​Tante
Aka dje69r
Posté le 09-02-2012 à 10:19:19  profilanswer
 

Citation :

et donc, quand tu déclares une constante dans un fichier VBS que tu double-cliques dessus, il t'envoie pas chier quand tu fais un dim <variable> as <type>


Non mais tu ne t'emmerdes pas, tu ne mets pas "Option Excplicit" et tu déclares donc tes variables implicitement.
Par défaut c'est du variant mais en fonction de ce que tu affectes il change tout ca comme il faut.
 
Toto = "Salut" sera une String.
 
Pas besoin de se casser la tête avec ca...
 
 
Par contre, tu parles de milliers de personnes à attaquer dans AD, mais tu boucles sur 50 valeurs de tableau...  :??:  
 
Tu fais quoi réellement ? Tu ajoutes juste des users à la volée ?


---------------
Soyez malin, louez entre voisins !
n°2125658
misato
Clavicula Nox
Posté le 09-02-2012 à 14:37:12  profilanswer
 

l'AD compte des milliers d'user. moi j'en ajoute quelques uns de temps en temps, avec des droits spécifiques. je veux pas non plus ajouter les droits à la moitié de la boite :o (remarque, plus de problème comme ça [:ddr555])

 

en tous cas merci, là pour le moment je me bats avec des ADODB.connection pour me logger sur différents domaines :D


Message édité par misato le 09-02-2012 à 14:38:05

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  définir une taille pour mon array

 

Sujets relatifs
[PHP] tri sur plusieurs array multidimentionelsCréer un Array superglobal
Tableau à taille défini par l'user au runtimeRégler la taille de la zone de graphique
splitter un arrayRécuperer tous les index d'un array dans 1 variable
WAS 6.1 - Taille courante d'une file JMS[Resolu][Qt] maximiser la taille d'une icone sur un bouton
[BATCH] récupération taille total disque[Qt] Modifier la taille d'une image
Plus de sujets relatifs à : définir une taille pour mon array


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR