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.
Je te voyais venir avec des champs supplémentaires, en me disant que tu allais savoir les ajouter, mais le coup du nombre variable de champs, je n'avais pas prévu.
ça ne pose guère de problème, mais je ne suis pas très sûr d'avoir compris ce qu'il y a autour.
Tu veux dire que si une ligne commence par "abc" il faut la copier telle quelle et arrêter le traitement ?
If UCase(Left(Ligne1, 4)) = "A" Then
Bon, ce qui vient après ça, c'est quelque chose qu'on ne va pas faire souvent. Left(Ligne1, 4), ça représente les quatre premiers caractères de Ligne1, donc ça ne peut pas faire "A", même après conversion en majuscules. La condition sera donc toujours fausse.
Si il s'agit de répartir dans les colonnes en fonction du premier caractère, ne te casse pas la tête, ça roule.
Est-ce que la première ligne ne représenterait pas justement l'affectation des initiales des champs ?
Dans le genre BCAD signifierait qu'une ligne commençant par B serait transcrite dans la première colonne, une commençant par C serait transcrite dans la deuxième, et pareil pour A et D dans la troisième et la quatrième ?
Si ce n'est pas ça je n'ai pas bien compris le rôle de la première ligne, ni comment doivent s'affecter les codes de champs, c'est-à-dire comment je dois savoir dans quelle colonne doit aller une ligne qui commence par un N, par exemple.
Si c'est bien ça, il suffit de mettre la lettre représentant le champ une fois, puisque les champs sont séparés par un caractère séparateur, il n'y a donc pas de longueur à indiquer.
Bien entendu, si plusieurs lignes commencent par le même code, seule la dernière sera prise en compte. Pour le passage d'un enregistrement à l'autre (d'une personne à l'autre), doit-on toujours se baser sur le nombre de lignes, ou changer d'enregistrement en rencontrant une ligne séparatrice ?
Comme tu t'en doutes, il s'agit d'avoir une convention bien claire si on veut que le programme réponde à tes attentes.
A bientôt.
Salut Ingrid,
Je te voyais venir avec des champs supplémentaires, en me disant que tu
allais savoir les ajouter, mais le coup du nombre variable de champs, je
n'avais pas prévu.
ça ne pose guère de problème, mais je ne suis pas très sûr d'avoir
compris ce qu'il y a autour.
Tu veux dire que si une ligne commence par "abc" il faut la copier telle
quelle et arrêter le traitement ?
If UCase(Left(Ligne1, 4)) = "A" Then
Bon, ce qui vient après ça, c'est quelque chose qu'on ne va pas faire
souvent. Left(Ligne1, 4), ça représente les quatre premiers caractères
de Ligne1, donc ça ne peut pas faire "A", même après conversion en
majuscules. La condition sera donc toujours fausse.
Si il s'agit de répartir dans les colonnes en fonction du premier
caractère, ne te casse pas la tête, ça roule.
Est-ce que la première ligne ne représenterait pas justement
l'affectation des initiales des champs ?
Dans le genre BCAD signifierait qu'une ligne commençant par B serait
transcrite dans la première colonne, une commençant par C serait
transcrite dans la deuxième, et pareil pour A et D dans la troisième et
la quatrième ?
Si ce n'est pas ça je n'ai pas bien compris le rôle de la première
ligne, ni comment doivent s'affecter les codes de champs, c'est-à-dire
comment je dois savoir dans quelle colonne doit aller une ligne qui
commence par un N, par exemple.
Si c'est bien ça, il suffit de mettre la lettre représentant le champ
une fois, puisque les champs sont séparés par un caractère séparateur,
il n'y a donc pas de longueur à indiquer.
Bien entendu, si plusieurs lignes commencent par le même code, seule la
dernière sera prise en compte. Pour le passage d'un enregistrement à
l'autre (d'une personne à l'autre), doit-on toujours se baser sur le
nombre de lignes, ou changer d'enregistrement en rencontrant une ligne
séparatrice ?
Comme tu t'en doutes, il s'agit d'avoir une convention bien claire si on
veut que le programme réponde à tes attentes.
Je te voyais venir avec des champs supplémentaires, en me disant que tu allais savoir les ajouter, mais le coup du nombre variable de champs, je n'avais pas prévu.
ça ne pose guère de problème, mais je ne suis pas très sûr d'avoir compris ce qu'il y a autour.
Tu veux dire que si une ligne commence par "abc" il faut la copier telle quelle et arrêter le traitement ?
If UCase(Left(Ligne1, 4)) = "A" Then
Bon, ce qui vient après ça, c'est quelque chose qu'on ne va pas faire souvent. Left(Ligne1, 4), ça représente les quatre premiers caractères de Ligne1, donc ça ne peut pas faire "A", même après conversion en majuscules. La condition sera donc toujours fausse.
Si il s'agit de répartir dans les colonnes en fonction du premier caractère, ne te casse pas la tête, ça roule.
Est-ce que la première ligne ne représenterait pas justement l'affectation des initiales des champs ?
Dans le genre BCAD signifierait qu'une ligne commençant par B serait transcrite dans la première colonne, une commençant par C serait transcrite dans la deuxième, et pareil pour A et D dans la troisième et la quatrième ?
Si ce n'est pas ça je n'ai pas bien compris le rôle de la première ligne, ni comment doivent s'affecter les codes de champs, c'est-à-dire comment je dois savoir dans quelle colonne doit aller une ligne qui commence par un N, par exemple.
Si c'est bien ça, il suffit de mettre la lettre représentant le champ une fois, puisque les champs sont séparés par un caractère séparateur, il n'y a donc pas de longueur à indiquer.
Bien entendu, si plusieurs lignes commencent par le même code, seule la dernière sera prise en compte. Pour le passage d'un enregistrement à l'autre (d'une personne à l'autre), doit-on toujours se baser sur le nombre de lignes, ou changer d'enregistrement en rencontrant une ligne séparatrice ?
Comme tu t'en doutes, il s'agit d'avoir une convention bien claire si on veut que le programme réponde à tes attentes.
A bientôt.
LE TROLL
Ah, ok "gloops", ben on va faire le point:
C'est toi qui parle de 3 colonnes, alors j'ai conservé "l'image" de ton expression pour justement ne pas rompre ton explication mystique, je te cite (réponse 22/3/5 à 19h22), tu dis: "Si ce point est gênant, on s'orientera vers les COLONNES à largeur fixe"
D'autre part, en parlant de mysticisme (là c'est moi), tu réponds: "En supposant clair que 3n représente un multiple de 3, n étant un entier, 3n signifiant 3 multiplié par n."
Tu ne crois pas que ce genre de réponse c'est incompréhensible justement pour une personne qui "a déjà du mal" (comme tu dis)...
D'ailleurs elle te répond: "Cher Gloops, Merci pour ta réponse qui necessite un bac+11 pour le comprendre...:-)...lol... "Ce n'et pas sympa de se moquer de mon français alors que je viens expres dans ce forum francçais avec un but d'apprendre mieux votre magnifique langue...je veux bien te voir parler Dutch..:-)...
Effectivement, t'es à côté de la plaque, tes propos sont incohérents et prétentieux, pour preuve, la réponse de l'intéressée!
D'autre part, ce n'est pas à toi que je réponds, contrairement à toi qui me réponds, non, je réponds à la personne qui pose une question, donc je ne réponds pas à ta question mais à la sienne, de facto, je ne serai effectivement pas dans le fil de ta réponse, ne t'en déplaîse...
Par ailleurs, pour reprendre ton code: "While Not EOF(1)"
C'est incompréhensible, on est pas en C avec des trucs du genre "i++", tu pourrais écrire correctement, soit: While EOF(pointeur) <> true
Ton second bout de code: "LigneCible = Ligne1 + ";" + Ligne2 + ";" + Ligne3"
Encore une fois, on est en VB, le "+" est réservé au opérations pas aux chaîne, c'est très mal choisit! Il faut mettre: LigneCible = Ligne1 & ";" & Ligne2 & ";" & Ligne3
Les "#" aussi ne servent à rien généralement, etc, bref y aurait beaucoup à dire, trop même, programme un peu mieux avant de me faire des remontrances!
Concernant ton code, d'un style assez néophyte en VB pour le moins, ben à 20h04 j'avais déjà mis en place dans ma réponse le principe du code à appliquer (j'ai dis le principe), et toi tu reprends le même principe à 22h43, commence par lire les réponses des autres au lieu de draguer, ça t'évitera de répondre ce qui a été répondu!
Concernant le fait que tu veuilles l'exclusivité de la discussion, ben si tu veux la draguer, tu le fais par courrier, mais pas ici, ok!
In fine, évites de répondre en fin, ça me fatigue le doigt de rouler la molette, si je veux savoir ce qui a été écrit je reprends les posts un par un, on ne répond pas en cours, ça a été débattu déjà ici, la majorité répond au début! ---------------------------
"Gloops" a écrit dans le message de news: 4240885c$0$19347$ Oui mais je ne me rappelle pas qu'il ait été question que le fichier source comporte trois colonnes. Si tu traites un autre sujet, sois gentil d'ouvrir un autre fil, Ingrid a déjà assez de mal.
Ah, ok "gloops", ben on va faire le point:
C'est toi qui parle de 3 colonnes, alors j'ai conservé
"l'image" de ton expression pour justement ne pas rompre ton
explication mystique, je te cite (réponse 22/3/5 à 19h22),
tu dis: "Si ce point est gênant, on s'orientera vers les
COLONNES à largeur fixe"
D'autre part, en parlant de mysticisme (là c'est moi),
tu réponds:
"En supposant clair que 3n représente un multiple de 3, n
étant un entier, 3n signifiant 3 multiplié par n."
Tu ne crois pas que ce genre de réponse c'est
incompréhensible justement pour une personne qui "a déjà du
mal" (comme tu dis)...
D'ailleurs elle te répond:
"Cher Gloops, Merci pour ta réponse qui necessite un bac+11
pour le comprendre...:-)...lol...
"Ce n'et pas sympa de se moquer de mon français alors que je
viens expres dans ce forum francçais avec un but d'apprendre
mieux votre magnifique langue...je veux bien te voir parler
Dutch..:-)...
Effectivement, t'es à côté de la plaque, tes propos sont
incohérents et prétentieux, pour preuve, la réponse de
l'intéressée!
D'autre part, ce n'est pas à toi que je réponds,
contrairement à toi qui me réponds, non, je réponds à la
personne qui pose une question, donc je ne réponds pas à ta
question mais à la sienne, de facto, je ne serai
effectivement pas dans le fil de ta réponse, ne t'en
déplaîse...
Par ailleurs, pour reprendre ton code:
"While Not EOF(1)"
C'est incompréhensible, on est pas en C avec des trucs du
genre "i++", tu pourrais écrire correctement, soit:
While EOF(pointeur) <> true
Ton second bout de code:
"LigneCible = Ligne1 + ";" + Ligne2 + ";" + Ligne3"
Encore une fois, on est en VB, le "+" est réservé au
opérations pas aux chaîne, c'est très mal choisit! Il faut
mettre:
LigneCible = Ligne1 & ";" & Ligne2 & ";" & Ligne3
Les "#" aussi ne servent à rien généralement, etc, bref y
aurait beaucoup à dire, trop même, programme un peu mieux
avant de me faire des remontrances!
Concernant ton code, d'un style assez néophyte en VB pour le
moins, ben à 20h04 j'avais déjà mis en place dans ma réponse
le principe du code à appliquer (j'ai dis le principe), et
toi tu reprends le même principe à 22h43, commence par lire
les réponses des autres au lieu de draguer, ça t'évitera de
répondre ce qui a été répondu!
Concernant le fait que tu veuilles l'exclusivité de la
discussion, ben si tu veux la draguer, tu le fais par
courrier, mais pas ici, ok!
In fine, évites de répondre en fin, ça me fatigue le
doigt de rouler la molette, si je veux savoir ce qui a été
écrit je reprends les posts un par un, on ne répond pas en
cours, ça a été débattu déjà ici, la majorité répond au
début!
---------------------------
"Gloops" <gloops@niark.fr> a écrit dans le message de news:
4240885c$0$19347$8fcfb975@news.wanadoo.fr...
Oui mais je ne me rappelle pas qu'il ait été question que
le fichier source comporte trois colonnes. Si tu traites un
autre sujet, sois gentil d'ouvrir un autre fil, Ingrid a
déjà assez de mal.
C'est toi qui parle de 3 colonnes, alors j'ai conservé "l'image" de ton expression pour justement ne pas rompre ton explication mystique, je te cite (réponse 22/3/5 à 19h22), tu dis: "Si ce point est gênant, on s'orientera vers les COLONNES à largeur fixe"
D'autre part, en parlant de mysticisme (là c'est moi), tu réponds: "En supposant clair que 3n représente un multiple de 3, n étant un entier, 3n signifiant 3 multiplié par n."
Tu ne crois pas que ce genre de réponse c'est incompréhensible justement pour une personne qui "a déjà du mal" (comme tu dis)...
D'ailleurs elle te répond: "Cher Gloops, Merci pour ta réponse qui necessite un bac+11 pour le comprendre...:-)...lol... "Ce n'et pas sympa de se moquer de mon français alors que je viens expres dans ce forum francçais avec un but d'apprendre mieux votre magnifique langue...je veux bien te voir parler Dutch..:-)...
Effectivement, t'es à côté de la plaque, tes propos sont incohérents et prétentieux, pour preuve, la réponse de l'intéressée!
D'autre part, ce n'est pas à toi que je réponds, contrairement à toi qui me réponds, non, je réponds à la personne qui pose une question, donc je ne réponds pas à ta question mais à la sienne, de facto, je ne serai effectivement pas dans le fil de ta réponse, ne t'en déplaîse...
Par ailleurs, pour reprendre ton code: "While Not EOF(1)"
C'est incompréhensible, on est pas en C avec des trucs du genre "i++", tu pourrais écrire correctement, soit: While EOF(pointeur) <> true
Ton second bout de code: "LigneCible = Ligne1 + ";" + Ligne2 + ";" + Ligne3"
Encore une fois, on est en VB, le "+" est réservé au opérations pas aux chaîne, c'est très mal choisit! Il faut mettre: LigneCible = Ligne1 & ";" & Ligne2 & ";" & Ligne3
Les "#" aussi ne servent à rien généralement, etc, bref y aurait beaucoup à dire, trop même, programme un peu mieux avant de me faire des remontrances!
Concernant ton code, d'un style assez néophyte en VB pour le moins, ben à 20h04 j'avais déjà mis en place dans ma réponse le principe du code à appliquer (j'ai dis le principe), et toi tu reprends le même principe à 22h43, commence par lire les réponses des autres au lieu de draguer, ça t'évitera de répondre ce qui a été répondu!
Concernant le fait que tu veuilles l'exclusivité de la discussion, ben si tu veux la draguer, tu le fais par courrier, mais pas ici, ok!
In fine, évites de répondre en fin, ça me fatigue le doigt de rouler la molette, si je veux savoir ce qui a été écrit je reprends les posts un par un, on ne répond pas en cours, ça a été débattu déjà ici, la majorité répond au début! ---------------------------
"Gloops" a écrit dans le message de news: 4240885c$0$19347$ Oui mais je ne me rappelle pas qu'il ait été question que le fichier source comporte trois colonnes. Si tu traites un autre sujet, sois gentil d'ouvrir un autre fil, Ingrid a déjà assez de mal.
LE TROLL
Salut,
Tu soulèves trop de problèmes en même temps: - la gestion des fichiers - la gestion des chaînes - la gestion des erreurs - Et sans doute d'autres, comme les chemins (path), etc...
Le mieux serait peut être que tu traites ça par mail en envoyant ton fichier data, ainsi tu pourrais mieux comprendre en voyant le code qui résoudrait le problème, car sur un newsGroups tu va avoir du mal à traiter 4 ou 5 sujets de front... Il faudrait les voir un par un.
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
Salut,
Tu soulèves trop de problèmes en même temps:
- la gestion des fichiers
- la gestion des chaînes
- la gestion des erreurs
- Et sans doute d'autres, comme les chemins (path), etc...
Le mieux serait peut être que tu traites ça par mail en
envoyant ton fichier data, ainsi tu pourrais mieux
comprendre en voyant le code qui résoudrait le problème, car
sur un newsGroups tu va avoir du mal à traiter 4 ou 5 sujets
de front... Il faudrait les voir un par un.
"Ingrid" <Ingrid@discussions.microsoft.com> a écrit dans le
message de news:
145DD1F1-A85C-4E45-8865-10FD9584EFA7@microsoft.com...
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.
Tu soulèves trop de problèmes en même temps: - la gestion des fichiers - la gestion des chaînes - la gestion des erreurs - Et sans doute d'autres, comme les chemins (path), etc...
Le mieux serait peut être que tu traites ça par mail en envoyant ton fichier data, ainsi tu pourrais mieux comprendre en voyant le code qui résoudrait le problème, car sur un newsGroups tu va avoir du mal à traiter 4 ou 5 sujets de front... Il faudrait les voir un par un.
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
jean-marc
"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)
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."
"Ingrid" <Ingrid@discussions.microsoft.com> wrote in message
news:EA1324FE-7D06-4335-98AC-CDFDE0F575D2@microsoft.com...
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)
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."
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)
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."
Pascal B.
"LE TROLL" a écrit: | Par ailleurs, pour reprendre ton code: "While Not EOF(1)" | | C'est incompréhensible, on est pas en C avec des trucs du | genre "i++", tu pourrais écrire correctement, soit: | While EOF(pointeur) <> true
Petite précision (déjà signalé, mais il y en a qui sont bornés): Utiliser "True" ou "False" dans une expression booléenne pour une condition est totalement RIDICULE et INUTILE... Par exemple, ici dans le cas présent, la fonction EOF retourne déjà True ou False, il n'est pas nécessaire de recomparer le résultat à True ou à False! (même pas pour la compréhension du code !) La bonne syntaxe est bien "While Not EOF(1)" de Gloops (ou "Until EOF(1)" mais c'est un autre débat)
Cordialement, Pascal B.
"LE TROLL" a écrit:
| Par ailleurs, pour reprendre ton code: "While Not EOF(1)"
|
| C'est incompréhensible, on est pas en C avec des trucs du
| genre "i++", tu pourrais écrire correctement, soit:
| While EOF(pointeur) <> true
Petite précision (déjà signalé, mais il y en a qui sont bornés):
Utiliser "True" ou "False" dans une expression booléenne pour une condition est totalement RIDICULE et INUTILE...
Par exemple, ici dans le cas présent, la fonction EOF retourne déjà True ou False, il n'est pas nécessaire de recomparer le résultat
à True ou à False! (même pas pour la compréhension du code !)
La bonne syntaxe est bien "While Not EOF(1)" de Gloops (ou "Until EOF(1)" mais c'est un autre débat)
"LE TROLL" a écrit: | Par ailleurs, pour reprendre ton code: "While Not EOF(1)" | | C'est incompréhensible, on est pas en C avec des trucs du | genre "i++", tu pourrais écrire correctement, soit: | While EOF(pointeur) <> true
Petite précision (déjà signalé, mais il y en a qui sont bornés): Utiliser "True" ou "False" dans une expression booléenne pour une condition est totalement RIDICULE et INUTILE... Par exemple, ici dans le cas présent, la fonction EOF retourne déjà True ou False, il n'est pas nécessaire de recomparer le résultat à True ou à False! (même pas pour la compréhension du code !) La bonne syntaxe est bien "While Not EOF(1)" de Gloops (ou "Until EOF(1)" mais c'est un autre débat)
Cordialement, Pascal B.
LE TROLL
Salut
While Not EOF(p) While EOF(p) = false
C'est sans équivoque, borné ou pas, la seconde ligne est plus compréhensible! Dans ta seconde ligne, on doit deviner que c'est une égalité qu'on recherche (faute de connaître), tandis que dans ma première ligne, on sait que c'est une égalité que l'on cherche...
On n'enlève pas ce qui altère la compréhension, on n'enlève seulement ce qui est inutile, et "not" pour qui ne sait pas, vicie la compréhension, ça ne veut rien dire en français, et on ne programme pas dans un style mathématique, mais linguistique...
Le borné te salut bien :o) ----------
"Pascal B." a écrit dans le message de news:
"LE TROLL" a écrit: | Par ailleurs, pour reprendre ton code: "While Not EOF(1)" | | C'est incompréhensible, on est pas en C avec des trucs du | genre "i++", tu pourrais écrire correctement, soit: | While EOF(pointeur) <> true
Petite précision (déjà signalé, mais il y en a qui sont bornés): Utiliser "True" ou "False" dans une expression booléenne pour une condition est totalement RIDICULE et INUTILE... Par exemple, ici dans le cas présent, la fonction EOF retourne déjà True ou False, il n'est pas nécessaire de recomparer le résultat à True ou à False! (même pas pour la compréhension du code !) La bonne syntaxe est bien "While Not EOF(1)" de Gloops (ou "Until EOF(1)" mais c'est un autre débat)
Cordialement, Pascal B.
Salut
While Not EOF(p)
While EOF(p) = false
C'est sans équivoque, borné ou pas, la seconde ligne est
plus compréhensible!
Dans ta seconde ligne, on doit deviner que c'est une
égalité qu'on recherche (faute de connaître), tandis que
dans ma première ligne, on sait que c'est une égalité que
l'on cherche...
On n'enlève pas ce qui altère la compréhension, on
n'enlève seulement ce qui est inutile, et "not" pour qui ne
sait pas, vicie la compréhension, ça ne veut rien dire en
français, et on ne programme pas dans un style mathématique,
mais linguistique...
Le borné te salut bien :o)
----------
"Pascal B." <Pascbr@hotmail_ANTISPASM_.com> a écrit dans le
message de news: e2opyT4LFHA.1144@TK2MSFTNGP09.phx.gbl...
"LE TROLL" a écrit:
| Par ailleurs, pour reprendre ton code: "While Not
EOF(1)"
|
| C'est incompréhensible, on est pas en C avec des trucs
du
| genre "i++", tu pourrais écrire correctement, soit:
| While EOF(pointeur) <> true
Petite précision (déjà signalé, mais il y en a qui sont
bornés):
Utiliser "True" ou "False" dans une expression booléenne
pour une condition est totalement RIDICULE et INUTILE...
Par exemple, ici dans le cas présent, la fonction EOF
retourne déjà True ou False, il n'est pas nécessaire de
recomparer le résultat
à True ou à False! (même pas pour la compréhension du code
!)
La bonne syntaxe est bien "While Not EOF(1)" de Gloops (ou
"Until EOF(1)" mais c'est un autre débat)
C'est sans équivoque, borné ou pas, la seconde ligne est plus compréhensible! Dans ta seconde ligne, on doit deviner que c'est une égalité qu'on recherche (faute de connaître), tandis que dans ma première ligne, on sait que c'est une égalité que l'on cherche...
On n'enlève pas ce qui altère la compréhension, on n'enlève seulement ce qui est inutile, et "not" pour qui ne sait pas, vicie la compréhension, ça ne veut rien dire en français, et on ne programme pas dans un style mathématique, mais linguistique...
Le borné te salut bien :o) ----------
"Pascal B." a écrit dans le message de news:
"LE TROLL" a écrit: | Par ailleurs, pour reprendre ton code: "While Not EOF(1)" | | C'est incompréhensible, on est pas en C avec des trucs du | genre "i++", tu pourrais écrire correctement, soit: | While EOF(pointeur) <> true
Petite précision (déjà signalé, mais il y en a qui sont bornés): Utiliser "True" ou "False" dans une expression booléenne pour une condition est totalement RIDICULE et INUTILE... Par exemple, ici dans le cas présent, la fonction EOF retourne déjà True ou False, il n'est pas nécessaire de recomparer le résultat à True ou à False! (même pas pour la compréhension du code !) La bonne syntaxe est bien "While Not EOF(1)" de Gloops (ou "Until EOF(1)" mais c'est un autre débat)
Cordialement, Pascal B.
Gloops
Salut,
Essaie juste de mettre en oeuvre ce que tu disais, une lecture du fichier source pour une lecture du fichier cible, et regarde le résultat.
Salut,
Essaie juste de mettre en oeuvre ce que tu disais, une lecture du
fichier source pour une lecture du fichier cible, et regarde le résultat.
"LE TROLL" | (...blabla incompréhensible...) on ne programme pas dans un style mathématique, | mais linguistique... |
Justement, "Tant que Pas Fin-De-Fichier" est plus proche du parlé naturel que "Tant que Fin-De-Fichier est faux"
;-) Pascal B.
Gloops
Salut,
Peut-être devrais-tu préciser que le passage à la personne suivante est marqué par une ligne qui commence par un A, et que les autres codes sont ignorés, les champs sont pris dans l'ordre de leur arrivée.
Ou bien c'était évident ?
Salut,
Peut-être devrais-tu préciser que le passage à la personne suivante est
marqué par une ligne qui commence par un A, et que les autres codes sont
ignorés, les champs sont pris dans l'ordre de leur arrivée.
Peut-être devrais-tu préciser que le passage à la personne suivante est marqué par une ligne qui commence par un A, et que les autres codes sont ignorés, les champs sont pris dans l'ordre de leur arrivée.