Disposer les informations d'un fichier dans un tableau [VB] - VB/VBA/VBS - Programmation
Marsh Posté le 08-07-2003 à 10:22:49
cfr la FAQ, j'ai posté un message sur les tableaux
Marsh Posté le 08-07-2003 à 10:26:40
mais est-ce que c'est une bonne idée? pas que je me lance dans un truc moisi?
sinon j'ai un petit problème pour affecter la valeur de la ligne dans mon tableau, je suppose que l'erreur est stupide mais je trouve pas
Code :
|
ps: l'erreur est "input past end of file"
Marsh Posté le 08-07-2003 à 10:45:30
je te suggère de faire ton test en début de boucle plutôt qu'à la fin, l'erreur se produit apparemment parce que ton fichier est vide.
Ensuite, non, ce n'est pas moisi pour autant que tu saches à l'avance ce que contient ton fichier
Marsh Posté le 08-07-2003 à 10:46:37
ah et une dernière chose: les Dim objet as New TypeMachin, c'est mal
Marsh Posté le 08-07-2003 à 10:51:00
drasche a écrit : je te suggère de faire ton test en début de boucle plutôt qu'à la fin, l'erreur se produit apparemment parce que ton fichier est vide. |
si j'affiche le texte dans le label (instruction en dessous) ca ne me fait pas d'erreur et ca marche correctement.
et concernant le dim object, je dois le déclarer en public pour faire bien?
Marsh Posté le 08-07-2003 à 11:20:38
une variable déclarée dans une procédure est toujours un Dim.
Si tu veux l'utiliser dans toute ta form, tu peux le déclarer en "Private" au lieu de "Dim" en tête de la form et l'instancier/détruire dans le Load/Unload de la form.
Marsh Posté le 08-07-2003 à 11:22:49
drasche a écrit : une variable déclarée dans une procédure est toujours un Dim. |
d'accord merci
j'ai essayé de faire un do while not .AtEndOfStream mais l'erreur est toujours la meme
Marsh Posté le 08-07-2003 à 11:30:03
Urd-sama a écrit : j'ai essayé de faire un do while not .AtEndOfStream mais l'erreur est toujours la meme |
j'ai essayé avec C:\test.txt à vide et forcément il rentre jamais dans la boucle
en remplissant le fichier ça allait un peu mieux
Une autre solution est de lire tout d'un coup et d'organiser un split sur base du retour chariot, puis pour chaque ligne sur ton séparateur de tableau. Ca a l'avantage de lire le fichier en une seule fois Et il ne faudra pas perdre de vue que ce sera des tableaux (chaque ligne) dans un tableau (l'ensemble des lignes).
Marsh Posté le 08-07-2003 à 13:19:22
par un hasard fort hasardeux, j'ai pu refaire fonctionner selon l'idée initiale (no comment).
par contre à présent l'erreur est autre part:
Code :
|
donc en résumé, j'ai réussi à splitter la ligne dans un premier tableau. ce qu'il me faut maintenant, c'est mettre ce tableau dans l'autre tableau de rang i. l'erreur sortie est "type mismatch". une idée?
Marsh Posté le 08-07-2003 à 13:30:13
arf zut j'ai pas su poster mon code avant midi, le voilà:
Code :
|
ça fait ce que tu voulais je crois
j'ai tapé un truc comme ça il y a un temps donc c'était facile de m'en rappeler.
En ce qui concerne les assignations de tableau, celui qui reçoit doit être de type Variant. Parce que tu essaies d'assigner un tableau à quelque chose (ici un élément de tableau), il ne peut donc être un type de base, donc tabDocument doit être déclaré Variant. Ca devrait le faire avec ça
Marsh Posté le 08-07-2003 à 14:01:40
j'ai essayé de modifier le mien, et finalement j'ai pris le tien qui fonctionne très bien merci (tu me sauve )
faut que j'apprenne à l'utiliser maintenant
Marsh Posté le 08-07-2003 à 14:11:59
Remarques sur mon code:
Je mets toujours la librairie en préfixe du type (donc j'écris Scripting.FileSystemObject au lieu de FileSystemObject par exemple). Ca évite les confusions et certains problèmes potentiels de mise à jour de composants.
Quand je lis un recordset ou un fichier, je fais ma boucle en testant ma condition avant la première opération: ça évite les surprises du genre le recordset/fichier est vide.
Je ferme toujours mes streams/recordsets proprement puis destruction explicite de tous les objets (dans l'ordre inverse de création naturellement), je n'aime pas laisser VB faire quelque chose que je peux faire mieux que lui (il a ses limites).
J'ai jamais utilisé les slashes pour référencer un chemin ou un fichier (VB est 100% Windows, donc je raisonne en 100% Windows quand je programme en VB).
Puis l'astuce, je réassigne le tableau à lui-même bien que j'eu pu passer par une variable intermédiaire -> aryInfo(l) = Split(aryInfo(l), vbTab)
Mais ça c'est de la pure paresse
Dès qu'un tableau doit recevoir des tableaux -> le déclarer As Variant.
Marsh Posté le 08-07-2003 à 14:16:37
ReplyMarsh Posté le 08-07-2003 à 15:17:48
j'ai encore une petite question, comment je fais pour accéder aux différentes informations du tableau? (un tit indice quoi )
Marsh Posté le 08-07-2003 à 15:22:50
L'expression aryInfo(1) permet d'accéder au sous-tableau inséré à l'indice 1. Puisqu'il te renvoie un tableau, il te faut le traiter comme tel, ce qui donnera aryInfo(1)(2) par exemple pour à accéder au tableau indicé à 1, puis à l'élément indicé 2 de ce tableau. Cfr la FAQ qui discute de cela aussi
Marsh Posté le 08-07-2003 à 15:24:44
donc théoriquement si j'appelle aryInfo(1)(1) il devrait m'afficher une valeur?
Marsh Posté le 08-07-2003 à 15:26:42
oui
Marsh Posté le 08-07-2003 à 15:36:06
?
Marsh Posté le 08-07-2003 à 15:49:35
après 30 minutes de combat acharné j'ai réussis à lui faire afficher ce que je voulais
merci encore
Marsh Posté le 09-07-2003 à 07:50:03
à présent j'ai un autre problème, plus avec le fichier, mais je continue quand meme dans ce sujet, étant donné que c'est toujours le meme programme
j'ai une list (Zone de liste) que j'ai transformé dans le style 1-Checkbox, histoire d'avoir les cases à cocher devant le nom de fichier.
A l'intérieur de mon code, je récupère et je fais un AddItem sur cette liste. Jusque là, aucun problèmes.
Par contre ce que j'aimerais faire, c'est pouvoir cocher ou non la case à cocher (suivant une information contenue ou non dans mon fichier). Et je n'ai absolument aucune idée de comment faire ça dans mon code
si qqun à une idée, ca me sauverait
Marsh Posté le 09-07-2003 à 08:42:37
C'est la propriété Selected, avec entre parenthèses le numéro d'index (à partir de zéro) qui permet de faire ça. Et l'évènement ItemCheck permet de savoir quand une case est cochée.
Marsh Posté le 09-07-2003 à 08:48:33
donc je dois d'abord créer les lignes (additem) et ensuite appliquer l'attribut selected? ou je peux tout faire d'un coup?
Marsh Posté le 09-07-2003 à 08:53:35
non pas tout d'un coup, d'abord AddItem, puis assigner le Selected (même chose si tu veux exploiter ItemData qui fonctionne comme un tableau de longs alors que Selected est un tableau de booléens). Mais rien ne t'empêche de faire une procédure qui le ferait, histoire de faire un appel pour ajouter une ligne et toutes les infos associées
Au fait ça se trouve dans MSDN
je dis ça parce que je vois bien le Moins Moins me dire que je fais du favoritisme
Marsh Posté le 09-07-2003 à 11:09:44
j'ai trouvé, si ca intéresse qqun:
Code :
|
Marsh Posté le 09-07-2003 à 11:11:23
ReplyMarsh Posté le 09-07-2003 à 11:15:26
ReplyMarsh Posté le 09-07-2003 à 11:20:37
nan c'est moi qui doit être lente
au moins je commence à m'en sortir un peu avec ce vaibai
Marsh Posté le 09-07-2003 à 11:24:40
VB c'est bieng (attention ami lecteur, un troll est caché dans cette phrase, sauras-tu le retrouver?)
Marsh Posté le 09-07-2003 à 11:39:08
encore une mini question
j'aimerais faire un bouton qui pops une fenetre avec exploration de fichier, pour que l'utilisateur puisse choisir un répertoire de base.
est-ce que je dois tout faire, ou il existe un objet tout fait? Car si je dois tout faire manuellement, l'utilisateur se débrouillera pour noter lui-même le chemin
Marsh Posté le 09-07-2003 à 11:48:17
Dans les composants, tu as un Microsoft Common Dialog, il cumule les fonctions Open/Save As/Color/Font/Print. En ce qui concerne les Open/Save As, ça ne marche que sur les fichiers et non les répertoires; le reste, je n'ai jamais essayé.
Marsh Posté le 10-07-2003 à 09:40:18
encore une chtite question.
Lors de la création de l'arborescence de dossiers chez l'utilisateur, j'aimerais qu'il affichage à chaque fois "dossier créé" et fasse une pause (pour simuler la création "pas-à-pas" ).
jusqu'à présent, j'ai réussis à utiliser la fonction sleep, mais il attend le nombre de secondes totales, puis affiche tout d'un coup. D'ou peut provenir mon erreur?
Code :
|
note: pour le moment je n'ai traité que le cas ou le dossier existe déjà
Marsh Posté le 10-07-2003 à 10:16:06
le problème du sleep c'est qu'il est pas documenté, donc non supporté (d'ailleurs il marche pas chez moi )
si t'es dans une form, je te suggère le contrôle Timer, qui va ticker toutes les x millisecondes (aussi longtemps que sa propriété Enabled vaut True). A partir de là, tu peux gérer un compteur sur ton array pour créer tes directories.
Intéressant le coup du For Each, j'avais jamais essayé sur les arrays
Marsh Posté le 10-07-2003 à 10:18:10
okay
et puis en utilisant sleep ca risque de pas fonctionner sur toutes les machines je suppose? je vais regarder du coté du timer (j'avais déjà hésité).
le coup du for each c'est mes restes de perl
c'est pour ca que je tenais absolument à affecter mon tableau de string
Marsh Posté le 08-07-2003 à 10:19:53
Bonjour
Je suis en train de faire un programme en vb pour de l'intranet. l'utilisateur devra télécharger le programme. Ce dernier devra récupérer les informations d'un fichier sur un share, puis offrir un éventail de possibilité à l'utilisateur, et en dernier lieu créera une arborescence de fichier.
Pour le moment je suis en train de regarder la récupération des informations du fichier. Ce dernier se compose selon le modèle suivant. chaque ligne représente un document précis, elle-meme composée de différentes infos:
Abréviation|Description|Small|Medium
ABC|Document numéro 1|oui|non
DBC|Document numéro 2|non|non
je pensais utiliser un tableau dans un tableau. le tableau 1 contiendrait le tableau 2 qui contient chaque info splittée de la ligne. (est-ce compréhensible?)
est-ce une bonne idée ou trop compliquée ou encore mauvaise? Je n'ai jamais utilisé de VB jusqu'à présent et j'ai de la peine à m'y habituer.
Merci pour votre aide future, j'en aurai bien besoin
Message édité par urd-sama le 08-07-2003 à 10:20:08