Charger un fichier .txt

Résolu
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005 - 27 juil. 2005 à 17:15
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005 - 27 juil. 2005 à 23:05
Après réflection, je pense qu'il est plus simple de le faire avec un fichier texte. Cependant avant, j'avais les différentes données en les unes au dessous des autres :
1
2
3
mon code était :
stFichier = (App.Path & "\Essai.txt")

Open stFichier For Input As #1

num_fiche = 0

Do While Not EOF(1)
num_fiche = num_fiche + 1
Line Input #1, tabl1(num_fiche, 1)
Line Input #1, tabl1(num_fiche, 2)
Line Input #1, tabl1(num_fiche, 3)
Line Input #1, tabl1(num_fiche, 4)
Line Input #1, tabl1(num_fiche, 5)
Line Input #1, tabl1(num_fiche, 6)
Line Input #1, tabl1(num_fiche, 7)
Line Input #1, tabl1(num_fiche, 8)
Line Input #1, tabl1(num_fiche, 9)
Line Input #1, tabl1(num_fiche, 10)
Line Input #1, tabl1(num_fiche, 11)
Line Input #1, tabl1(num_fiche, 12)
Line Input #1, tabl1(num_fiche, 13)
Loop
Close #1

Maintenant pour chaque fiches, les différentes données sont les unes à cotée des autres, le enter ne sert que pour insérer une autre fiche, d'où :

1er fiche : 1 (tab) 3 (tab) 5 (tab) 3 (tab) 2 (tab) 66 (tab)
2ième fiche : 4 (tab) 13 (tab) 51 (tab) 3 (tab) 7 (tab) 1 (tab)

ect....

Comment je dois écrire (modifier) le code pour ouvrir un fichier texte comme celui la ?

Merci davance pour votre aide .....

Luca62.

22 réponses

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 18:40
tu sais que tu as "21 colonnes" en fait, et tu peux compter ton niombre de lignes au fur et à mesure. tu as tout cedont tu as besoin.

pour excel, tu n'as pas dit si VB reprenait excel, ou si tu travaillais à partir d'un fichier excel converti (manuellement).
si c'est le 2e cas, c'est dans les options d'export.

afficher ensuite chaque valeur dans un TxtBox, bon courage, çà va être moche et inutile, mais c'est faisable.

il te faut procéder de la 2e manière indiquée, à savoir faire un Type de 21 var :

Private Type MesColonnes
c01 as string
c02 as string
...
c21 as string
end type
dim Tabligne() as MesColonnes

et dans ta lecture :

Input #1, tabligne(i).c1, tabligne(i).c2, tabligne(i).c3, tabligne(i).c4, (.........) tabligne(i).c20, tabligne(i).c21

ensuite, avec i, tu sauras qu'il y a par exemple 3lignes, donc 63 TxtBox

tu n'as qu'une TxtBox à créer, en groupe, puis Load 62 fois.
plus moche, dur dur....

en plus, je crois qu'une form est limitée en composants, je ne sais pas si c'est en composants fixes ou totaux....
(je viens d'essayé avec 1000, çà marche...)


voilà ;)

PCPT
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 77
27 juil. 2005 à 17:55
Salut
Bah en fait, à chaque fois que tu vas lire UNE ligne, tu liras les X paramètres de ta fiche : Suffit d'utiliser Split par exemple :

Dim Tableau() As String
Tableau = Split(LaLigneLue, vbTab)
et tu auras la première donnée dans Tableau(0), et la dernière dans Tableau(UBound(Tableau))
Attention : si ta ligne se termine par un vbTab, la dernière donnée sera vide, normal

A toi de les réintégrer dans ton propre tableau avec une boucle.
Eventuellement, regarde l'aide de la fonction Split, je crois qu'il est possible de Split vers un tableau à plusieurs dimensions, ce qui simplifierait la routine.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 17:59
ta méthode d'ouverture est bonne (input #)
c'est tes Line qui sont fausses

en suposant que tu ne sais pas combien de ligne contient ton fichier texte :

dim TabLigne() as string
dim i as integer
dim stFichier as string

stFichier = (App.Path & "\Essai.txt")

Open stFichier For Input As #1

i=0

Do While Not EOF(1)
redim preserve tabligne(i)
Input #1, tabligne(i)
i = i +1
Loop
Close #1

c'est tout.
ensuite, il te suffit de compter le nombre de tabulation dans chaque tabligne(x) pour savoir que tu as autant de valeurs par ligne

si tu savait que tu as toujours 6 valeurs par lignes, et qu'elles ne sont pas :
1er fiche : 1 (tab) 3 (tab) 5 (tab) 3 (tab) 2 (tab) 66 (tab)

mais plutôt

1er fiche : "1";"3";"5";"3";"2";"66"

tu pourrais alors créer un tableau de 6 colonnes, qui recevraient directement la ligne "formatée"


Do While Not EOF(1)
Input #1, tabligne(i).a, tabligne(i).b, tabligne(i).c, tabligne(i).d, tabligne(i).e, tabligne(i).f
i = i +1
Loop

voilà ;)

attention : il faut créé un type pour les colonnes. on ne peut pas faire de Redim Preserve sur un Tableau Multidimentionnel

PCPT
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 18:18
En fait j'ai 21 valeurs qui sont toutes séparée par une tabulation. Mais elle provienne d'un tableau en excelle, alors y a t'il un moyen de passer excelle en .txt et en remplaçant le ";", car si j'ai bien compris, ça facilite l'opération ?
Car les 21 valeurs correspondent à 21 cases textes, et
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 18:24
En fait j'ai 21 valeurs qui sont toutes séparée par une tabulation. Mais elle provienne d'un tableau en excelle, alors y a t'il un moyen de passer excelle en .txt et en remplaçant le ";", car si j'ai bien compris, ça facilite l'opération ?
Car les 21 valeurs correspondent à 21 cases textes, et donc, il faut que je place les différentes valeus dans ces cases ?

L'indice i me permet de connaitre le nombre de ligne donc le nombre de fiche, mais comment je peux mettre (différencier) les différents textes et les placés dans les cases textes ?? Est ce qu'il ne me faut pas un indice suplémentaire ?

Merci d'avance .

Luca62.
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 19:54
j'ai mis le Private Type MesColonnes dans le form_load et j'ai le message d'erreur suivant : invalide inside procedure ?

Qu'est ce que je dois faire ?

Merci.

Luca62
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 21:12
il faut le déclarer en déclaration générale
(toute première lignes en haut de page)
PCPT
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 21:15
Dis, encore un petit problème, pourquoi il me met un subscipt out of range à cette ligne :

Input #1, tabligne(num_fiche).c01, tabligne(num_fiche).c02, tabligne(num_fiche).c03, tabligne(num_fiche).c04, tabligne(num_fiche).c05, tabligne(num_fiche).c06, tabligne(num_fiche).c07, tabligne(i).c08, tabligne(i).c09, tabligne(num_fiche).c10, tabligne(num_fiche).c11, tabligne(num_fiche).c12, tabligne(num_fiche).c13, tabligne(num_fiche).c14, tabligne(num_fiche).c15, tabligne(num_fiche).c16, tabligne(num_fiche).c17, tabligne(num_fiche).c18, tabligne(num_fiche).c19, tabligne(num_fiche).c20

voilà comment j'ai mis :

Open stFichier For Input As #1

num_fiche = 1

Do While Not EOF(1)
Input #1, tabligne(num_fiche).c01, tabligne(num_fiche).c02, tabligne(num_fiche).c03, tabligne(num_fiche).c04, tabligne(num_fiche).c05, tabligne(num_fiche).c06, tabligne(num_fiche).c07, tabligne(i).c08, tabligne(i).c09, tabligne(num_fiche).c10, tabligne(num_fiche).c11, tabligne(num_fiche).c12, tabligne(num_fiche).c13, tabligne(num_fiche).c14, tabligne(num_fiche).c15, tabligne(num_fiche).c16, tabligne(num_fiche).c17, tabligne(num_fiche).c18, tabligne(num_fiche).c19, tabligne(num_fiche).c20

num_fiche = num_fiche + 1

Loop
Close #1

Merci d'avance.

Luca62
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 21:23
parce que tu commences ton tableau à 1. donc tabligne(1) n'existe pas encore quand tu le remplis.
mais comme de toute manière, tu as oublié de redimentionner ton tableau dans la boucle (redim preserve tabligne(num_ligne)) .......

voilà, relis ci-dessus pour + d'infos ;)
PCPT
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 21:41
Ha, ok .... Donc j'ai commencé à zéro, et mis le redis, il commence bien à lire le fichier mais il s'arrete à la num_fiche 396 et j'ai le message d'erreur suivant : Input past end of file ?? Alors que dans le fichier texte, tout est normal, j'ai vérifier, y a bien les 20 champs séparés par un ; donc ok.

Ca peut être dû à quoi ?

Merci pour votre aide.

Luca62
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 22:04
je viens de vérifié ce que j'ai mis au dessus, même avec seulement 4 lignes, il me met ce message d'erreur (Input past end of file) ?? Ca veut pas dire qu'il n'arrive pas au bout ?

Je sais pas, j'ai un peu du mal avec les messages d'erreurs ....

Merci d'avance.

Luca62
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 22:05
essaie avec simplement :
(...)
Input #1, tabligne(num_fiche).c01
(...)

là, on lui dit de prendre la ligne complète uniquement dans la première "colonne de tableau"
si il n'y a pas d'erreur, alors çà veut dire qu'actuellement, le passage dans la boucle ne prend pas correctement les différentes occurences du fichier...

dis moi si je ne suis pas assez clair ;)
PCPT
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 22:08
oui, ça fonctionne il lance bien le programme... Qu'est ce que cela signifie ??

Luca62.
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 22:13
/auteurdetail.aspx?ID=410800 oui, ça fonctionne il lance bien le programme... Qu'est ce que cela signifie ??

Je lui ai demander dans une case texte le tabligne(num_fiche).c01 il m'indique bien quelque chose de la première ligne, mais pas la première partie de chiffre avant le ;

La première ligne du fichier texte est :
4/02/1978;6;17;30;31;35;37;15;281535;460171;0;0;0;0;18;5418;1701;28,51;35206;1,24
et il m'indique la partie en rouge.... BIZARRE ???

Luca62.
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 22:25
peux tu refaire le teste avec ton fichier texte ayant ce format de lignes :

"4/02/1978";"6";"17";"30";"31";"35";"37";"15";"281535";"460171";"0";"0";"0";"0";"18";"5418";"1701";"28,51";"35206";"1","24"

même une seule ligne si besoin, ou 5fois la même ;)
PCPT
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 22:29
et si toujours rien, entre les côtes, essaie de remplacer les ";" par des ","
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 22:31
cherche pas c'est bon, l'erreur est là......

relis ta syntaxe, la valeur prise est à partir de la virgule. suis donc mon dernier exemple/conseil
PCPT
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 22:32
J'ai copier deux lignes comme celle la dans le fichier texte...
Voilà ce qu'il m'affiche dans la case texte cette fois ...

;"6";"17";"30";"31";"35";"37";"15";"281535";"460171";"0";"0";"0";"0";"18";"5418";"1701";"28

et quand je fais défiler avec les flèches il m'indique autre chose mais jamais ce qu'il y a entre deux "" ??

Merci.
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
27 juil. 2005 à 22:43
ok, ça fonctionne bien, j'ai remplacer les , pour des . et les ; par les ,
il m'indique bien tout ce qu'il y a entre deux ,XXX,
Mais dans une ligne comment différencier les 20 valeurs ? car j'ai fait txtDate = tabligne(num_fiche).c01 et forcement j'ai toute la ligne dans la case txtDate, enfin pas toute la ligne les 20 valeurs, donc à chaque fois que je clique sur les flèches qui permette de changer de ficher, ben il passe les différentes valeurs en revue ...

Donc, dans cette ligne comme attibué aux 20 cases textes les 20 valeurs d'un ligne ?

MERCI.....

Luca62
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
27 juil. 2005 à 22:48
"il m'indique autre chose mais jamais ....."
çà te dirait pas d'être encore moins précis???

vide ton fichier texte (totalement vide).
copie en bloc çà :
"a1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"
"b1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"
"c1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"
"d1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"
"e1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"

donc on part sur 20 valeurs (et non plus 21 comme tu l'avais dit)
ensuite tu fais le test avec

Input #1, tabligne(num_fiche).c01

et un autre avec

Input #1, tabligne(num_fiche).c01, tabligne(num_fiche).c02, tabligne(num_fiche).c03, tabligne(num_fiche).c04, tabligne(num_fiche).c05, tabligne(num_fiche).c06, tabligne(num_fiche).c07, tabligne(i).c08, tabligne(i).c09, tabligne(num_fiche).c10, tabligne(num_fiche).c11, tabligne(num_fiche).c12, tabligne(num_fiche).c13, tabligne(num_fiche).c14, tabligne(num_fiche).c15, tabligne(num_fiche).c16, tabligne(num_fiche).c17, tabligne(num_fiche).c18, tabligne(num_fiche).c19, tabligne(num_fiche).c20

là tu compares et tu me colles le rendu exact. çà sera plus simple ;)

PCPT
0
Rejoignez-nous