OVH Cloud OVH Cloud

CasseTête-lecture d'un fichier TEXTE

49 réponses
Avatar
Ingrid
Hello Tout le monde,
Voilà ma problématique: J'ouvre 2 fichiers txt, un en Input et deuxieme en
ajout APPEND.
Le 1er fichier est structuré en ligne je souhaite transformer en colonne
dans le fichier 2. Je m'explique parce que c'est compliqué:
Exemple:
Dans le fichier Input j'ai par ex:
Ingrid
28ans
Neerlandaise
Je souhaite transformer ces données en tableau dans le fichier 2 append :
Ingrid 28ans Neerlandaise
Donc mes questions sont les suivantes:
1- Comment faire pour que dans la meme boucle de passer d'une ligne à une
autre pour le fichier1 et de rester à la meme ligne pour le fichier 2.
2- c quoi le code qui permet de passer d'une colonne à une autre dans un
fichier texte.

Ce truc me rend folle.

Je vous serai reconnaissant si vous arrivez à m'aider.

Kisses

Ingrid

10 réponses

1 2 3 4 5
Avatar
LE TROLL
Mais moi je connais eof, je me mettais à la place de
quelqu'un qui ne connaissait pas, ou peu... Dans l'absolu ça
reste un élément d'appréciation personnel :o)
-----------

"Pascal B." a écrit dans le
message de news:
"LE TROLL" a écrit
| Salut, là ta fonction est explicite :o)


La fonction EOF est tout aussi explicite (apparement pas
pour tout le monde)

EOF = End-Of-File = Fin-De-Fichier

Re- ;-)
Pascal B.




Avatar
Gloops
LE TROLL a écrit, le 23/03/2005 12:13 :
Oh, je n'ai pas spécialement regardé, où y a-t-il
ignominie???



J'ai parlé d'ignominie ?
Erreur, je dirais ... Si il s'agit de transcrire trois lignes en entrée
par une ligne en sortie, en faisant le même nombre d'écritures que de
lectures, logiquement il y a un os.

Mais c'est vrai qu'on peut moduler ce que je viens de dire, de deux façons.

D'une part, tu dis que "lecture" peut regrouper un ensemble d'opérations
de lecture. Soit, c'est au niveau clarté que ça me paraissait pêcher,
mais à ce niveau il semblerait que je n'aie pas été le meilleur.

D'autre part, on peut faire comme dit Jean-Marc, écrire directement dans
le tampon de sortie, et déclencher la véritable opération d'écriture
une fois que tout est prêt, par Print #numfichiersortie, ""
c'est-à-dire sans point-virgule à la fin.

Finalement, l'essentiel reste de bien se comprendre.
Ingrid nous a dit qu'elle avait un prof : si il fait bien son boulot, la
question va finir par être d'une grande limpidité.
Avatar
LE TROLL
Je vais voir sur l'heure et le champ???
-------

"Gloops" a écrit dans le message de news:
424165e7$0$1210$
LE TROLL a écrit, le 23/03/2005 12:13 :
Oh, je n'ai pas spécialement regardé, où y a-t-il
ignominie???



J'ai parlé d'ignominie ?
Erreur, je dirais ... Si il s'agit de transcrire trois
lignes en entrée par une ligne en sortie, en faisant le
même nombre d'écritures que de lectures, logiquement il y
a un os.

Mais c'est vrai qu'on peut moduler ce que je viens de
dire, de deux façons.

D'une part, tu dis que "lecture" peut regrouper un
ensemble d'opérations de lecture. Soit, c'est au niveau
clarté que ça me paraissait pêcher, mais à ce niveau il
semblerait que je n'aie pas été le meilleur.

D'autre part, on peut faire comme dit Jean-Marc, écrire
directement dans le tampon de sortie, et déclencher la
véritable opération d'écriture une fois que tout est prêt,
par Print #numfichiersortie, ""
c'est-à-dire sans point-virgule à la fin.

Finalement, l'essentiel reste de bien se comprendre.
Ingrid nous a dit qu'elle avait un prof : si il fait bien
son boulot, la question va finir par être d'une grande
limpidité.



Avatar
Gloops
LE TROLL a écrit, le 23/03/2005 13:55 :
Je vais voir sur l'heure et le champ???
-------



Oh ben, ça va barder :)
Avatar
Driss HANIB
Bonjour Ingrid

Une petite question, dans ton fichier quels enregistrements peuvcent être
multiples (pour le même A bien sur) ?
Uniquement les 'types D' ou d'autres ?

Driss HANIB

"Ingrid" a écrit dans le message de
news:
Hi,
oufff c'est moi qui ai lancé tout ce debat...
D'abord je remercie tout le monde et sans exception pour les reponses
données ( Gloops, le troll, pascal b. et jean-marc...).

Jean-marc, effectivement ton code fonctionne mais il y a un probleme. Je
vais essayer d'être claire et de bien m'exprimer. D'abord partons du code


de
jean-marc:
Tu as pris comme hypthèse que dans le fichier il y a une suite logique de


A
à Z. J'ai oublié de préciser que c'etait pas le cas. je vais vous donner
l'exercice qui va me rendre folle à la néerlandaise et si j'arrive pas à


le
resoudre je vais prendre le thalys pour passer ma journée à fumer dans un
cofee shop à Amsterdam...lol....
voilà:
J'ai un fichier Entrée structurée en ligne de la façon suivante:
xxx4528xxxxxx
:A:Ingrid
:B:28Ans
:R:Debutante
:D:01/01/2005 Dîplome
:D:01/02/2005 Demenagement
:A:Jacques
:B:40Ans
:R:Expert
:D:01/02/2005 Dîplome
:D:01/03/2005 Demenagement
xxxxx352xxxxxxxxxxxxxx
Ce fichier je veux le transformer en fichier sortie de la façon suivante:
Ingrid;28ans;Debutante;01/01/200 Dîplome
Ingrrid;28ans;Debutante;01/02/2005 Demenagement
Jacques;40Ans;Expert;01/02/2005 Dîplome
Jacques;40Ans;Expert;01/03/2005 Demenagement

Donc on peut conclure le suivant:
1- Il s'agit pas d'une suite logique de A à Z
2- dans le fichier Entrée, à mon avis la clé c'est le D parceque qd il y a
un second D pour la meme personne (comme dans l'exemple), il saute une


ligne
il reprend les infos A, B et R et il rajoute une nouvelle ligne.


Notez chers amis que j'arrive à le faire sous excel car je peux bouger


entre
ligne et les cells plus facilement mais mon prof qui me torture veut qu'on


le
fasse sous excel....

Est ce que vous pouvez m'aider ?

Kisses à tout le monde

Ingrid

"jean-marc" wrote:

> "Ingrid" wrote in message
> news:
> > gloops,
> > ça marche mais ça répond pas completement à mon probleme et ceci pour


la
> > raison suivante:
> > 1-Parce que dans mon exemple on a fixé 3 lignes comme hypothèse et


s'il y
> en
> > avait x lignes, on fait comment?
> > je te donne un exercice avec ton code un peu retouché par des


conditions :
> > voilà j'ai un fichier sortie dans lequel il y a les informations
> suivantes:
>
> Hello,
>
> voici une fonction qui résoud ton problème, complètement cette fois je
> pense:
> J'ai testé avec exactement le fichier que tu donnais, et le résultat


produit
> est:
>
> Ingrid;28ans;Dutch;Sympa;Amatrice en Informatique
> Gloops;32ans;Français;Specialiste en Informatique
> Jacques;50ans;German;Insuportable;Nul en Informatique
>
> Les hyppothèses sont qu'un champ commence par "A" - "Z"
> Toutes les autres lignes sont ignorées
> On peut avoir autant de champs que l'on veut (MAX_FIELDS)
>
> Voici le code:
>
> '----------------------------------------
> Private Const MAX_FIELDS = 50
>
> Private Sub TransformFile(inputFile As String, outputFile As String)
> Dim inp As Integer, outp As Integer
> Dim s As String
> Dim fields(MAX_FIELDS) As String
> Dim nb_fields As Integer
> Dim i As Integer
> Dim first_car As String
>
> On Error GoTo err_TF
>
> inp = FreeFile
> Open inputFile For Input As #inp
> outp = FreeFile
> Open outputFile For Output As #outp
> While Not EOF(inp)
> Line Input #inp, s
> first_car = Mid$(s, 1, 1)
> If (first_car >= "A") And (first_car <= "Z") Then
> ' a new valied field
> ' is it a "A" (first field)
> If first_car = "A" Then
> ' 2 cases here
> ' a complete record is ready to be read or it's the


first
> one
> If nb_fields = 0 Then
> ' ok its a new record - just store it
> nb_fields = nb_fields + 1
> ' keep only from character position 3, to remove


"A:",
> "Z:", etc.
> fields(nb_fields) = Mid$(s, 3)
> Else
> ' whowhowho ! we got a complete record!
> ' let's write it
> For i = 1 To nb_fields
> Print #outp, fields(i);
> If i <> nb_fields Then
> Print #outp, ";";
> End If
> Next i
> Print #outp, "" ' just to insert a Carriage
> Return/LineFeed
> ' Now restore field count
> nb_fields = 1
> ' store the beginning of this new record
> fields(nb_fields) = Mid$(s, 3)
> End If
> Else
> ' ok just add a field in the array
> nb_fields = nb_fields + 1
> ' keep only from character position 3, to remove "A:",


"Z:",
> etc.
> fields(nb_fields) = Mid$(s, 3)
> End If
> Else
> ' nothing to do, we just ignore the ligne
> End If
> Wend
> ' end of file
> ' do we have somethiong to write ?
> If nb_fields > 0 Then
> ' ok, just write it
> For i = 1 To nb_fields
> Print #outp, fields(i);
> If i <> nb_fields Then
> Print #outp, ";";
> End If
> Next i
> Print #outp, "" ' just to insert a Carriage Return/LineFeed
> End If
> ' That's it :-)
> Close #inp
> Close #outp
> end_TF:
> Exit Sub
> err_TF:
> MsgBox "error : " & Err.Description & " (" & Err.Number & ")"
> Resume end_TF
> End Sub
>
> ' ----------------- Sample call -------------------
> Private Sub Command1_Click()
> Call TransformFile("D:JMDvpmt#VBng376data.txt",
> "D:JMDvpmt#VBng376dataOUT.txt")
> End Sub
>
> Bonne programmation!
>
> --
> Jean-marc
> "There are only 10 kind of people
> those who understand binary and those who don't."
>
>
>
>


Avatar
LE TROLL
Ahhhhhhh, tu as raison!
------------
dim v as string
do while eof(p)...
if eof(p)... then exit do
v=""
for i = 1 to 3
v = v & résultat_lecture_fichier_1
next i
fichier_2 = v
loop
------------
Et comme ça, est-ce que ça va (le principe hein, lol), ne me
dis pas qu'ainsi ça ne marcherait pas :o)
----------

"Gloops" a écrit dans le message de news:
424165e7$0$1210$
LE TROLL a écrit, le 23/03/2005 12:13 :
Oh, je n'ai pas spécialement regardé, où y a-t-il
ignominie???



J'ai parlé d'ignominie ?
Erreur, je dirais ... Si il s'agit de transcrire trois
lignes en entrée par une ligne en sortie, en faisant le
même nombre d'écritures que de lectures, logiquement il y
a un os.

Mais c'est vrai qu'on peut moduler ce que je viens de
dire, de deux façons.

D'une part, tu dis que "lecture" peut regrouper un
ensemble d'opérations de lecture. Soit, c'est au niveau
clarté que ça me paraissait pêcher, mais à ce niveau il
semblerait que je n'aie pas été le meilleur.

D'autre part, on peut faire comme dit Jean-Marc, écrire
directement dans le tampon de sortie, et déclencher la
véritable opération d'écriture une fois que tout est prêt,
par Print #numfichiersortie, ""
c'est-à-dire sans point-virgule à la fin.

Finalement, l'essentiel reste de bien se comprendre.
Ingrid nous a dit qu'elle avait un prof : si il fait bien
son boulot, la question va finir par être d'une grande
limpidité.



Avatar
Gloops
Une autre question. Ingrid, tu as bien dit qu'il s'agit d'exercices à la
suite d'un cours, n'est-ce pas ? On n'est pas limité dans le temps ni le
nombre de questions successives ?
Avatar
Gloops
Salut,

Dans le principe oui ça a l'air d'être ça, à condition de ne pas oublier
les séparateurs de champs en sortie :)

On pourrait pinailler sur fichier_2 = v, mais bon on est d'accord qu'il
s'agit d'écrire dessus en ajout ...

























LE TROLL a écrit, le 23/03/2005 14:06 :

Ahhhhhhh, tu as raison!
------------
dim v as string
do while eof(p)...
if eof(p)... then exit do
v=""
for i = 1 to 3
v = v & résultat_lecture_fichier_1
next i
fichier_2 = v
loop
------------
Et comme ça, est-ce que ça va (le principe hein, lol), ne me
dis pas qu'ainsi ça ne marcherait pas :o)


Avatar
Ingrid
oui uniquement le D peut être multiple...

Merci

"Driss HANIB" wrote:

Bonjour Ingrid

Une petite question, dans ton fichier quels enregistrements peuvcent être
multiples (pour le même A bien sur) ?
Uniquement les 'types D' ou d'autres ?

Driss HANIB

"Ingrid" a écrit dans le message de
news:
> Hi,
> oufff c'est moi qui ai lancé tout ce debat...
> D'abord je remercie tout le monde et sans exception pour les reponses
> données ( Gloops, le troll, pascal b. et jean-marc...).
>
> Jean-marc, effectivement ton code fonctionne mais il y a un probleme. Je
> vais essayer d'être claire et de bien m'exprimer. D'abord partons du code
de
> jean-marc:
> Tu as pris comme hypthèse que dans le fichier il y a une suite logique de
A
> à Z. J'ai oublié de préciser que c'etait pas le cas. je vais vous donner
> l'exercice qui va me rendre folle à la néerlandaise et si j'arrive pas à
le
> resoudre je vais prendre le thalys pour passer ma journée à fumer dans un
> cofee shop à Amsterdam...lol....
> voilà:
> J'ai un fichier Entrée structurée en ligne de la façon suivante:
> xxx4528xxxxxx
> :A:Ingrid
> :B:28Ans
> :R:Debutante
> :D:01/01/2005 Dîplome
> :D:01/02/2005 Demenagement
> :A:Jacques
> :B:40Ans
> :R:Expert
> :D:01/02/2005 Dîplome
> :D:01/03/2005 Demenagement
> xxxxx352xxxxxxxxxxxxxx
> Ce fichier je veux le transformer en fichier sortie de la façon suivante:
> Ingrid;28ans;Debutante;01/01/200 Dîplome
> Ingrrid;28ans;Debutante;01/02/2005 Demenagement
> Jacques;40Ans;Expert;01/02/2005 Dîplome
> Jacques;40Ans;Expert;01/03/2005 Demenagement
>
> Donc on peut conclure le suivant:
> 1- Il s'agit pas d'une suite logique de A à Z
> 2- dans le fichier Entrée, à mon avis la clé c'est le D parceque qd il y a
> un second D pour la meme personne (comme dans l'exemple), il saute une
ligne
> il reprend les infos A, B et R et il rajoute une nouvelle ligne.
>
>
> Notez chers amis que j'arrive à le faire sous excel car je peux bouger
entre
> ligne et les cells plus facilement mais mon prof qui me torture veut qu'on
le
> fasse sous excel....
>
> Est ce que vous pouvez m'aider ?
>
> Kisses à tout le monde
>
> Ingrid
>
> "jean-marc" wrote:
>
> > "Ingrid" wrote in message
> > news:
> > > gloops,
> > > ça marche mais ça répond pas completement à mon probleme et ceci pour
la
> > > raison suivante:
> > > 1-Parce que dans mon exemple on a fixé 3 lignes comme hypothèse et
s'il y
> > en
> > > avait x lignes, on fait comment?
> > > je te donne un exercice avec ton code un peu retouché par des
conditions :
> > > voilà j'ai un fichier sortie dans lequel il y a les informations
> > suivantes:
> >
> > Hello,
> >
> > voici une fonction qui résoud ton problème, complètement cette fois je
> > pense:
> > J'ai testé avec exactement le fichier que tu donnais, et le résultat
produit
> > est:
> >
> > Ingrid;28ans;Dutch;Sympa;Amatrice en Informatique
> > Gloops;32ans;Français;Specialiste en Informatique
> > Jacques;50ans;German;Insuportable;Nul en Informatique
> >
> > Les hyppothèses sont qu'un champ commence par "A" - "Z"
> > Toutes les autres lignes sont ignorées
> > On peut avoir autant de champs que l'on veut (MAX_FIELDS)
> >
> > Voici le code:
> >
> > '----------------------------------------
> > Private Const MAX_FIELDS = 50
> >
> > Private Sub TransformFile(inputFile As String, outputFile As String)
> > Dim inp As Integer, outp As Integer
> > Dim s As String
> > Dim fields(MAX_FIELDS) As String
> > Dim nb_fields As Integer
> > Dim i As Integer
> > Dim first_car As String
> >
> > On Error GoTo err_TF
> >
> > inp = FreeFile
> > Open inputFile For Input As #inp
> > outp = FreeFile
> > Open outputFile For Output As #outp
> > While Not EOF(inp)
> > Line Input #inp, s
> > first_car = Mid$(s, 1, 1)
> > If (first_car >= "A") And (first_car <= "Z") Then
> > ' a new valied field
> > ' is it a "A" (first field)
> > If first_car = "A" Then
> > ' 2 cases here
> > ' a complete record is ready to be read or it's the
first
> > one
> > If nb_fields = 0 Then
> > ' ok its a new record - just store it
> > nb_fields = nb_fields + 1
> > ' keep only from character position 3, to remove
"A:",
> > "Z:", etc.
> > fields(nb_fields) = Mid$(s, 3)
> > Else
> > ' whowhowho ! we got a complete record!
> > ' let's write it
> > For i = 1 To nb_fields
> > Print #outp, fields(i);
> > If i <> nb_fields Then
> > Print #outp, ";";
> > End If
> > Next i
> > Print #outp, "" ' just to insert a Carriage
> > Return/LineFeed
> > ' Now restore field count
> > nb_fields = 1
> > ' store the beginning of this new record
> > fields(nb_fields) = Mid$(s, 3)
> > End If
> > Else
> > ' ok just add a field in the array
> > nb_fields = nb_fields + 1
> > ' keep only from character position 3, to remove "A:",
"Z:",
> > etc.
> > fields(nb_fields) = Mid$(s, 3)
> > End If
> > Else
> > ' nothing to do, we just ignore the ligne
> > End If
> > Wend
> > ' end of file
> > ' do we have somethiong to write ?
> > If nb_fields > 0 Then
> > ' ok, just write it
> > For i = 1 To nb_fields
> > Print #outp, fields(i);
> > If i <> nb_fields Then
> > Print #outp, ";";
> > End If
> > Next i
> > Print #outp, "" ' just to insert a Carriage Return/LineFeed
> > End If
> > ' That's it :-)
> > Close #inp
> > Close #outp
> > end_TF:
> > Exit Sub
> > err_TF:
> > MsgBox "error : " & Err.Description & " (" & Err.Number & ")"
> > Resume end_TF
> > End Sub
> >
> > ' ----------------- Sample call -------------------
> > Private Sub Command1_Click()
> > Call TransformFile("D:JMDvpmt#VBng376data.txt",
> > "D:JMDvpmt#VBng376dataOUT.txt")
> > End Sub
> >
> > Bonne programmation!
> >
> > --
> > Jean-marc
> > "There are only 10 kind of people
> > those who understand binary and those who don't."
> >
> >
> >
> >





Avatar
Ingrid
oui mais là il y a tout les éléments de l'exercice....

"Gloops" wrote:

Une autre question. Ingrid, tu as bien dit qu'il s'agit d'exercices à la
suite d'un cours, n'est-ce pas ? On n'est pas limité dans le temps ni le
nombre de questions successives ?




1 2 3 4 5