Charger un fichier .txt

Résolu
Signaler
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005
-
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005
-
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

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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.
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
il faut le déclarer en déclaration générale
(toute première lignes en haut de page)
PCPT
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

oui, ça fonctionne il lance bien le programme... Qu'est ce que cela signifie ??

Luca62.
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

/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.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
et si toujours rien, entre les côtes, essaie de remplacer les ";" par des ","
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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.
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
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