Bonjour,
Zeshrek a raison, c'est sans doute plus simple pour toi de faire ainsi.
Juste pour complément :
SDD : structure de données, AES : algo de chiffrement plutôt performant.
Pour le coup de réinitialiser à un tableau type Dim $array[1], ça donne un tableau de taille 1 dont la première et seule valeur peut être tout et n'importe quoi; je suis sans doute psycho rigide là dessus, mais je n'aime pas faire ça ^^ (la programmation "à la volée" ne me plait pas, j'aime savoir que le code que j'écris est bon avant même de le lancer :
http://fr.wikipedia.org/wiki/Programmation_par_contrat)
Ca demande sans doute plus de boulot, mais je tiens un invariant pour ma sdd quand je modélise un tableau :
Le premier élément est la taille du tableau, les suivants en sont les valeurs.
Ca implique de maintenir la valeur en tête de tableau à chaque ajout ou suppression, mais au moins :
- La recherche de la taille se fait en une seule opération $array[0], boucler sur les éléments se fait avec un for i = 1 To $array[0] au lieu de for i = 0 To UBound($array) - 1 (l'accès $array[0] est une opération unique (complexité O(1), alors qu'un UBound /* à mon avis */ se fait en comptant tous les éléments du tableau, donc O(n)).
- C'est une bonne façon de faire pour modéliser un tableau vide comme une sdd de tableau : Local $array[1] = [0], un tableau à un élément qui contient la valeur 0, zéro éléments significatifs.
- Et puis bizarrement c'est aussi la façon native de faire pour beaucoup de fonctions, genre les StringSplit, WinList et autres : c'est sans doute pas pour rien ^^
Je me doute que ce message ne servira pas à grand chose, mais si besoin, n'hésite(z) pas à me mp
A bientôt !
PS: Pour les fichiers INI, c'est dans ce genre de fichiers que j'aurai mis les informations confidentielles de ton programme, au lieu de les mettre dans le code source, exemple pour les identifiants de connexion à une base de données quelconque :
► Afficher le texte
Code : Tout sélectionner
[BDD]
Nom=Base de données du nAiO
Adresse=jdbc:oracle:thin:@10.1.0.123:20300:nAiO
Login=root
Pass=root
Quand tu as besoin de les lire, tu fais un IniRead($fichierINI, "BDD", "Adresse", ""), et comme ça rien de personnel n'apparait dans ton code source. J'utilise les INI pour beaucoup de choses, l'internationalisation notamment. Je compte mettre sur le site une UDF de gestion de l'internationalisation, ça aide pour faire plus sérieux et taper sur un public étranger ^^
EDIT : Je préfère modérer mon propos sur la complexité du UBound, Jchd et son bleu de travail m'ont fait peur ^^
Mais si le calcul de la taille n'est pas sensible à la taille elle même pourquoi un Ubound met-il plus longtemps sur un tableau de taille 10.000.000 (précédé d'affectations en tout genre) que sur un array de taille 10 (0.022453 ms dans le premier cas, 0.011453 ms dans le second) ? Je suis d'accord un seul exemple n'est pas significatif et que la différence en microsecondes on s'en fiche, mais bon, c'est une moyenne sur 20 tests chacuns.
EDIT2: Faire un test ne sert à rien si ce n'est pas un test correctement pensé ^^ Donc j'ai vérifié : l'accès à $array[0] se fait en sensiblement le même temps dans les deux cas (0.007263 ms dans le premier cas, et 0.007265 ms dans le second). Même si ça n'est pas une preuve, ça aide à penser dans mon idée.
EDIT3@Zeshrek: Donc un Dim $tableau[1] redimensionnera le tableau a 1 valeur, qui elle même sera systématiquement égale a zero
Faux, testé et initialisée à la chaine vide "". Mais je n'ai pas la main sur ce genre de fonction de base, est-ce-que c'est une vraie chaine vide? Donc pas tout à fait tout et n'importe quoi, puisqu'on sait que ça s'affiche comme une chaine vide (Mode parano: j'espère juste que c'est pas comme dans certains langages tels que le C++ où la référence peut taper n'importe où ou dépasser si on fait mal les choses, on voit ce que ça donne avec la Wii et ses failles à la Zelda ^^)
PS: Désolé de toutes ses éditions, j'aime pas laisser de fautes d'orthographe trop voyantes ^^