OVH Cloud OVH Cloud

Ingrid:Gloops/Jean-Marc/Troll/PascalB - traitement d'un File TXT

4 réponses
Avatar
Ingrid
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
ingridnlfr@hotmail.com

4 réponses

Avatar
LE TROLL
Ahhhh, lol, c'est bien ce que je disais, tu as un fichier à
caractéristiques variables selon l'heure :o) C'est
extrêmement difficile de s'en sortir avec ce type de fichier
:o) Et pour les ";" j'avais bien deviné = Excel...
Bon courage :o)
---------
Avatar
jean-marc
"Ingrid" wrote in message
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



Hello,

comme déjà signalé par Gloops, si tu ne donnes pas TOUTES les règles du jeu
au départ, c'est impossible de donner une
solution qui fonctionne vraiment.

Pour revenir à ton problème, il suffit de légèrement modifier mon code pour
que ça fonctionne comme tu veux.
Avant de coder quoi que se soit de plus, il faut avoir:
La liste COMPLETE de tous les entêtes de champs 'A, B, R, D, etc...'
Indiquer lesquels peuvent être uniques et lesquels non, comme ça
[Exemple]

A: UNIQUE (Doit etre présent ou non ?)
B: UNIQUE (Doit etre présent ou non ?)
R: UNIQUE (Doit etre présent ou non ?)
D: MULTIPLE (Doit etre présent au moins une fois ?)

autres ...

Alors, il sera aisé de venir avec une solution qui prendra tout ça en
compte.
En réalité, c'est très simple à programmer, mais les spécifications doivent
être claires et complètes.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Ingrid
Oui Jean-marc: A, B et R doivent être présent et D au moins une fois par
Personne don par A.
c'est exactement comme tu le décrit:
A: UNIQUE (Doit etre présent )
B: UNIQUE (Doit etre présent )
R: UNIQUE (Doit etre présent )
D: MULTIPLE (Doit etre présent au moins une fois )


J'ai tout essayer avec ton code et ça ne marche pas tu peux m'aider please ?
Merci
Ingrid
"jean-marc" wrote:

"Ingrid" wrote in message
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

Hello,

comme déjà signalé par Gloops, si tu ne donnes pas TOUTES les règles du jeu
au départ, c'est impossible de donner une
solution qui fonctionne vraiment.

Pour revenir à ton problème, il suffit de légèrement modifier mon code pour
que ça fonctionne comme tu veux.
Avant de coder quoi que se soit de plus, il faut avoir:
La liste COMPLETE de tous les entêtes de champs 'A, B, R, D, etc...'
Indiquer lesquels peuvent être uniques et lesquels non, comme ça
[Exemple]

A: UNIQUE (Doit etre présent ou non ?)
B: UNIQUE (Doit etre présent ou non ?)
R: UNIQUE (Doit etre présent ou non ?)
D: MULTIPLE (Doit etre présent au moins une fois ?)

autres ...

Alors, il sera aisé de venir avec une solution qui prendra tout ça en
compte.
En réalité, c'est très simple à programmer, mais les spécifications doivent
être claires et complètes.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."







Avatar
jean-marc
"Ingrid" wrote in message
news:
Oui Jean-marc: A, B et R doivent être présent et D au moins une fois par
Personne don par A.
c'est exactement comme tu le décrit:
A: UNIQUE (Doit etre présent )
B: UNIQUE (Doit etre présent )
R: UNIQUE (Doit etre présent )
D: MULTIPLE (Doit etre présent au moins une fois )


J'ai tout essayer avec ton code et ça ne marche pas tu peux m'aider please


?

Re,
voila; Le résultat avec tes données est:

Ingrid;28Ans;Debutante;01/01/2005 Dîplome
Ingrid;28Ans;Debutante;01/02/2005 Demenagement
Jacques;40Ans;Expert;01/02/2005 Dîplome
Jacques;40Ans;Expert;01/03/2005 Demenagement

Ce qui m'a l'air correct et corrpondre à ce que tu voulais.
Si l'explication t'intérèsse, voici:
il suffit de gérer dans un second tableau les lignes :D:
Au moment du report, on rajoute une boucle pour créer
autant de lignes qu'il y a d'entrées D pour ce record.

NOTE:
- le programme ne vérifie PAS que les champs sont bien présents, dans le bon
ordre, etc.
Si nécessaire, tu devras ajouter un test ou 2 pour vérifier ça.

Et voici le programme, qu'il suffisait de modifier très légèrement:

Private Const MAX_FIELDS = 50
Private Const MAX_D_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 DFields(MAX_D_FIELDS) As String
Dim nb_fields As Integer
Dim nb_fieldsD As Integer
Dim i As Integer
Dim j 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, 2, 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, 4)
Else
' whowhowho ! we got a complete record!
' let's write it
For j = 1 To nb_fieldsD
For i = 1 To nb_fields
Print #outp, fields(i) & ";";
Next i
Print #outp, DFields(j)
Next j

' Now restore field count
nb_fields = 1
nb_fieldsD = 0
' store the beginning of this new record
fields(nb_fields) = Mid$(s, 4)
End If
Else
' ok just add a field in the array
' with special handling of D fields
If first_car = "D" Then
nb_fieldsD = nb_fieldsD + 1
' keep only from character position 3, to remove "A:",
"Z:", etc.
DFields(nb_fieldsD) = Mid$(s, 4)
Else
nb_fields = nb_fields + 1
' keep only from character position 3, to remove "A:",
"Z:", etc.
fields(nb_fields) = Mid$(s, 4)
End If
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 j = 1 To nb_fieldsD
For i = 1 To nb_fields
Print #outp, fields(i) & ";";
Next i
Print #outp, DFields(j)
Next j
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

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."