OVH Cloud OVH Cloud

Traitement de fichier

20 réponses
Avatar
Mjöllnir
Bonjour,

Je dois effectuer un petit traitement sur un fichier texte (csv).
Je ne connais pas vb et je ne souhaite pas passer trop de temps pour
résoudre mon problème qui est ponctuel.
J'explique le besoin.
j'ai un fichier dont chaque ligne contiens une référence, un
description, et deux mesures (nombres à virgule). Ces valeurs sont
séparés par des points-virgules.
Les lignes sont triés selon les références.
Je dois juste caluler les moyennes des deux mesures pour chaque
référence et mettre cela dans un autre fichier.
Pouvez-vous m'aider ?
Merci.


--
Mjöllnir
Asgarr

10 réponses

1 2
Avatar
Jean-Marc
"Mjöllnir" a écrit dans le message de
news:
Bonjour,

Je dois effectuer un petit traitement sur un fichier texte (csv).
Je ne connais pas vb et je ne souhaite pas passer trop de temps pour
résoudre mon problème qui est ponctuel.
J'explique le besoin.
j'ai un fichier dont chaque ligne contiens une référence, un
description, et deux mesures (nombres à virgule). Ces valeurs sont
séparés par des points-virgules.
Les lignes sont triés selon les références.
Je dois juste caluler les moyennes des deux mesures pour chaque
référence et mettre cela dans un autre fichier.



Hello,

voici un petit ptrogramme tout simple qui fait ce que tu veux.
Il suffit de placer un bouton de commande (Command1) sur la forme.

J'ai utilisé pour tester:
FICHIER INPUT
A00001;aquarium;100.23;78.12
A00002;babaorum;42.21;39.12
A00003;petibonum;41.54;23.41

et j'ai obtenu:
89,175
40,665
32,475


Le code est commenté et très simple à comprendre. Si tu as des questions,
n'hésite pas.

Il faut adapter le code suivant pour mettre les bons noms et chemins
des fichiers d'entrée et de sortie.

8<---------------------------------------------
'
Private Sub Command1_Click()
Dim f As Integer
Dim g As Integer
Dim s As String
Dim t() As String
Dim v1 As Double, v2 As Double
Dim moy As Double
Dim nb As Long

f = FreeFile
' adapter ceci pour désigner le bon fichier d'entrée
Open "c:mes_mesures.csv" For Input As #f

g = FreeFile
' adapter ceci pour désigner le bon fichier de sortie
Open "c:moyennes.txt" For Output As #g

' parcourir tout le fichier
While Not (EOF(f))
' lire une ligne complète
Line Input #f, s
' pour compter le nombre de lignes
nb = nb + 1
' la découper en champs, en indiquant le
' point-virgule comme séparateur
t() = Split(s, ";")
' t(2) contient le 3eme élément de chaque ligne
' donc la première valeur d'après l'énoncé
v1 = Val(t(2))
' t(3) contient le 4eme élément de chaque ligne
' donc la seconde valeur d'après l'énoncé
v2 = Val(t(3))
' calcul de la moyenne
moy = (v1 + v2) / 2
' écriture dans le fichier de sortie
Print #g, moy
Wend
Close #g
Close #f
MsgBox "c'est fini, " & nb & " lignes lues."
End Sub
'
8<---------------------------------------------

Voila, cela devrai marcher tout seul.

Hope this helps;

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
LE TROLL
Salut,

Voici la moyenne des 2 mesures par ligne, reversées du fichier csv.txt au
fichier moyenne.txt, ci-joint fichiers annexé.
Voici aussi le code:

' expl1 : tansfert de fichier : form 1
'
Option Explicit
'
Sub Form_Activate()
Dim position(3) As Integer
Dim lgrLigne As Integer
Dim alphaNombre As String
Dim valeur(2) As Double
Dim moyenne As Double
Dim p01 As Long
Dim p02 As Long
Dim ligne As String
Dim i As Long
'
ChDrive App.Path
ChDir App.Path
'
List1.Clear
List2.Clear
List3.Clear
'
p01 = FreeFile
Open "csv.txt" For Input As p01
Do While EOF(p01) = False
Line Input #p01, ligne
lgrLigne = Len(ligne)
position(1) = InStr(1, ligne, ";", 1)
position(2) = InStr(position(1) + 1, ligne, ";", 1)
position(3) = InStr(position(2) + 1, ligne, ";", 1)
List1.AddItem Mid(ligne, position(2) + 1, (position(3) - position(2)) - 1)
List2.AddItem Mid(ligne, position(3) + 1, lgrLigne - position(3))
Loop
Close p01
'
List3.Clear
For i = 0 To List1.ListCount - 1
valeur(1) = CDbl(List1.List(i))
valeur(2) = CDbl(List2.List(i))
moyenne = (valeur(1) + valeur(2)) / 2
List3.AddItem moyenne
Next i
'
p02 = FreeFile
Open "moyenne.txt" For Output As p02
For i = 1 To List3.ListCount - 1
Print #p02, List3.List(i)
Next i
Close p02
End Sub
'---------fin------------






"Mjöllnir" a écrit dans le message de news:

Bonjour,

Je dois effectuer un petit traitement sur un fichier texte (csv).
Je ne connais pas vb et je ne souhaite pas passer trop de temps pour
résoudre mon problème qui est ponctuel.
J'explique le besoin.
j'ai un fichier dont chaque ligne contiens une référence, un
description, et deux mesures (nombres à virgule). Ces valeurs sont
séparés par des points-virgules.
Les lignes sont triés selon les références.
Je dois juste caluler les moyennes des deux mesures pour chaque
référence et mettre cela dans un autre fichier.
Pouvez-vous m'aider ?
Merci.


--
Mjöllnir
Asgarr






begin 666 csv.txt
M83 Q.W!R96UI97([,3(S+#0U.S(S-"*8C R.W-E8V]N9#LR,RPT.S,T
M+#4-"F,P,SMT<F]I<VGH;64[,2PR,S0[,BPS-#4-"F0P-#MQ=6%T<FGH;64[
M,3(S-"PP,3LY.#<L-C4-"F4P-3MC:6YQ=6GH;64[,RPQ-#$Q-CLR,BPW#0IE
6,#8[<VEX:>AM93LQ,"PR,#LR,"PT, ``
`
end

begin 666 exp1.vbp
M5'EP93U%>&4-"D9O<FT]1F]R;3$N9G)M#0I2969E<F5N8V4]*EQ'>S P,#(P
M-#,P+3 P,# M,# P,"U#,# P+3 P,# P,# P,# T-GTC,BXP(S C+BY<+BY<
M+BY<5TE.1$]74UQS>7-T96TS,EQS=&1O;&4R+G1L8B-/3$;VUA=&EO
M;@T*4W1A<G1U<#TB1F]R;3$B#0I#;VUM86YD,S(](B(-"DYA;64](E!R;VIE
M=#$B#0I(96QP0V]N=&5X=$E$/2(P(@T*0V]M<&%T:6)L94UO9&4](C B#0I-
M86IO<E9E<CTQ#0I-:6YO<E9E<CTP#0I2979I<VEO;E9E<CTP#0I!qO26YC
M<F5M96YT5F5R/3 -"E-E<G9E<E-U<'!O<G1&:6QE<STP#0I697)S:6]N0V]M
M<&%N>4YA;64](E!E<G-O(@T*0V]M<&EL871I;VY4>7!E/3 -"D]P=&EM:7IA
M=&EO;E1Y<&4], T*1F%V;W)096YT:75M4')O*'1M*3TP#0I#;V1E5FEE=T1E
M8G5G26YF;STP#0I.;T%L:6%S:6YG/3 -"D)O=6YD<T-H96-K/3 -"D]V97)F
M;&]W0VAE8VL], T*1FQ0;VEN=$-H96-K/3 -"D9$259#:&5C:STP#0I5;G)O
M=6YD961&4#TP#0I3=&%R=$UO9&4], T*56YA='1E;F1E9#TP#0I2971A:6YE
M9#TP#0I4:')E861097)/8FIE8W0], T*36%X3G5M8F5R3V94:')E861S/3$-
!"@``
`
end

begin 666 exp1.vbw
M1F]R;3$@/2 T-"@L(#8X,$P+"!#+" R,BP@,CDL(#8V,"#@Q
%+"!##0H`
`
end

begin 666 Form1.frm
M5D524TE/3B U+C P#0I"96=I;B!60BY&;W)M($9O<FTQ( T*(" @0V%P=&EO
M;B @(" @(" @(#T@(" B97AP(#$B#0H@("!#;&EE;G1(96EG:'0@(" @/2 @
M(#0R,# -"B @($-L:65N=$QE9G0@(" @(" ](" @-C -"B @($-L:65N=%1O
M<" @(" @(" ](" @-#4P#0H@("!#;&EE;G17:61T:" @(" @/2 @(#4S,3 -
M"B @($QI;FM4;W!I8R @(" @(" ](" @(D9O<FTQ(@T*(" @4V-A;&5(96EG
M:'0@(" @(#T@(" T,C P#0H@("!38V%L95=I9'1H(" @(" @/2 @(#4S,3 -
M"B @(%-T87)T57!0;W-I=&EO;B ](" @,R @)U=I;F1O=W,@1&5F875L= T*
M(" @0F5G:(N3&ES=$)O>"!,:7-T,R -"B @(" @($AE:6=H=" @(" @
M(" @(" ](" @,S4W, T*(" @(" @3&5F=" @(" @(" @(" @(#T@(" S-S(P
M#0H@(" @("!486));F1E>" @(" @(" @/2 @(#,-"B @(" @(%1O<" @(" @
M(" @(" @(" ](" @-#@P#0H@(" @("!7:61T:" @(" @(" @(" @/2 @(#$T
M-34-"B @($5N9 T*(" @0F5G:(N3&ES=$)O>"!,:7-T,B -"B @(" @
M($AE:6=H=" @(" @(" @(" ](" @,S4W, T*(" @(" @3&5F=" @(" @(" @
M(" @(#T@(" Q.3(P#0H@(" @("!486));F1E>" @(" @(" @/2 @(#$-"B @
M(" @(%1O<" @(" @(" @(" @(" ](" @-#@P#0H@(" @("!7:61T:" @(" @
M(" @(" @/2 @(#$T-34-"B @($5N9 T*(" @0F5G:(N3&ES=$)O>"!,
M:7-T,2 -"B @(" @($AE:6=H=" @(" @(" @(" ](" @,S4W, T*(" @(" @
M3&5F=" @(" @(" @(" @(#T@(" Q,C -"B @(" @(%1A8DEN9&5X(" @(" @
M(" ](" @, T*(" @(" @5&]P(" @(" @(" @(" @(#T@(" T.# -"B @(" @
M(%=I9'1H(" @(" @(" @(" ](" @,30U-0T*(" @16YD#0H@("!"96=I;B!6
M0BY,86)E;"!,86)E;#$@#0H@(" @("!#87!T:6]N(" @(" @(" @/2 @("(@
M(" @=F%L975R(#$@(" @(" @(" @(" @(" @(" @(" @(" @("!686QE=7(@
M,B @(" @(" @(" @(" @(" @(" @(" @($UO>65N;F4N='AT(@T*(" @(" @
M2&5I9VAT(" @(" @(" @(#T@(" R-34-"B @(" @($QE9G0@(" @(" @(" @
M(" ](" @,3(P#0H@(" @("!486));F1E>" @(" @(" @/2 @(#(-"B @(" @
M(%1O<" @(" @(" @(" @(" ](" @,3(P#0H@(" @("!7:61T:" @(" @(" @
M(" @/2 @(#4P-34-"B @($5N9 T*16YD#0I!='1R:6)U=&)?3F%M92 ]
M(")&;W)M,2(-"D%T=')I8G5T92!60E]';&]B86Q.86UE4W!A8V4@/2!&86QS
M90T*071T<FEBqE(%9"7T-R96%T86)L92 ]($9A;'-E#0I!='1R:6)U=&4@
M5D)?4')E9&5C;&%R961)9" ](%1Rd-"D%T=')I8G5T92!60E]%>'!O<V5D
M(#%L<V4-"@T*#0H@("<@97AP;#$@.B!T86YS9F5R="!D92!F:6-H:65R
M(#]R;2 Q#0H@(" @)PT*("!/<'1I;;&EC:70-"B @)PT*(" @
M( T*#0I3=6(@1F]R;5]!8W1I=F%#0H@($1I;2!P;W-I=&EO;*2!!
M<R!);G1E9V5R#0H@($1I;2!L9W),:6=N92!!<R!);G1E9V5R#0H@($1I;2!A
M;'!H84YO;6)R92!!<R!3=')I;F<-"B @1&EM('9A;&5U*2!!<R!$;W5B
M;&4-"B @1&EM(&UO>65N;,@1&]U8FQE#0H@($1I;2!P,#$@07,@3&]N
M9PT*("!$:6T@<# R($%S($QO;F<-"B @1&EM(&QI9VYE($%S(%-T<FEN9PT*
M("!$:6T@:2!!<R!,;VYG#0H@("<-"B @0VA$<FEV92!!<' N4&%T: T*("!#
M:$1I<B!!<' N4&%T: T*(" G#0H@($QI<W0Q+D-L96%R#0H@($QI<W0R+D-L
M96%R#0H@($QI<W0S+D-L96%R#0H@("<-"B @<# Q(#)E949I;&4-"B @
M3W!E;B B8W-V+G1X="(@1F]R($EN<'5T($%S(' P,0T*("!$;R!7:&EL92!%
M3T8H<# Q*2 ]($9A;'-E#0H@(" @3&EN92!);G!U=" C<# Q+"!L:6=N90T*
M(" @(&QG<DQI9VYE(#&5N*&QI9VYE*0T*(" @('!O<VET:6]N*#$I(#T@
M26Y3='(H,2P@;&EG;F4L("([(BP@,2D-"B @("!P;W-I=&EO;*2 ]($EN
M4W1R*'!O<VET:6]N*#$I("L@,2P@;&EG;F4L("([(BP@,2D-"B @("!P;W-I
M=&EO;*2 ]($EN4W1R*'!O<VET:6]N*#(I("L@,2P@;&EG;F4L("([(BP@
M,2D-"B @("!,:7-T,2Y!9&1)=&5M($UI9"AL:6=N92P@<&]S:71I;VXH,BD@
M*R Q+" H<&]S:71I;VXH,RD@+2!P;W-I=&EO;*2D@+2 Q*0T*(" @($QI
M<W0R+D%D9$*&QI9VYE+"!P;W-I=&EO;*2 K(#$L(&QG<DQI
M9VYE("T@<&]S:71I;VXH,RDI#0H@($QO;W -"B @0VQO<V4@<# Q#0H@("<-
M"B @3&ES=#,N0VQE87(-"B @1F]R(&D@/2 P(%1O($QI<W0Q+DQI<W1#;W5N
M=" M(#$-"B @("!V86QE=7(H,2D@/2!#1&)L*$QI<W0Q+DQI<W0H:2DI#0H@
M(" @=F%L975R*#(I(#;"A,:7-T,BY,:7-T*&DI*0T*(" @(&UO>65N
M;F4@/2 H=F%L975R*#$I("L@=F%L975R*#(I*2 O(#(-"B @("!,:7-T,RY!
M9&1)=&5M(&UO>65N;F4-"B @3F5X="!I#0H@("<-"B @<# R(#)E949I
M;&4-"B @3W!E;B B;6]Y96YN92YT>'0B($9O<B!/,@<# R#0H@
M($9O<B!I(#T@,2!4;R!,:7-T,RY,:7-T0V]U;G0@+2 Q#0H@(" @4')I;G0@
M(W P,&ES=#,N3&ES="AI*0T*("!.97AT(&D-"B @0VQO<V4@<# R#0I%
(;#0H`
`
end

begin 666 moyenne.txt
H,"C$*,3$Q,"PX,PT*,3(L.3("C$U+#,-"@``
`
end
Avatar
LE TROLL
Heu, j'ai mis une form et des listes, comme ça tu peux comprendre ce qui se
passe, mais on aurait pu le faire sans liste en aveugle...
------------ :o)

"LE TROLL" <le a écrit dans le message de news:
u$0EX$
Salut,

Voici la moyenne des 2 mesures par ligne, reversées du fichier csv.txt au
fichier moyenne.txt, ci-joint fichiers annexé.
Voici aussi le code:

' expl1 : tansfert de fichier : form 1
'
Option Explicit
'
Sub Form_Activate()
Dim position(3) As Integer
Dim lgrLigne As Integer
Dim alphaNombre As String
Dim valeur(2) As Double
Dim moyenne As Double
Dim p01 As Long
Dim p02 As Long
Dim ligne As String
Dim i As Long
'
ChDrive App.Path
ChDir App.Path
'
List1.Clear
List2.Clear
List3.Clear
'
p01 = FreeFile
Open "csv.txt" For Input As p01
Do While EOF(p01) = False
Line Input #p01, ligne
lgrLigne = Len(ligne)
position(1) = InStr(1, ligne, ";", 1)
position(2) = InStr(position(1) + 1, ligne, ";", 1)
position(3) = InStr(position(2) + 1, ligne, ";", 1)
List1.AddItem Mid(ligne, position(2) + 1, (position(3) - position(2)) - 1)
List2.AddItem Mid(ligne, position(3) + 1, lgrLigne - position(3))
Loop
Close p01
'
List3.Clear
For i = 0 To List1.ListCount - 1
valeur(1) = CDbl(List1.List(i))
valeur(2) = CDbl(List2.List(i))
moyenne = (valeur(1) + valeur(2)) / 2
List3.AddItem moyenne
Next i
'
p02 = FreeFile
Open "moyenne.txt" For Output As p02
For i = 1 To List3.ListCount - 1
Print #p02, List3.List(i)
Next i
Close p02
End Sub
'---------fin------------






"Mjöllnir" a écrit dans le message de news:

Bonjour,

Je dois effectuer un petit traitement sur un fichier texte (csv).
Je ne connais pas vb et je ne souhaite pas passer trop de temps pour
résoudre mon problème qui est ponctuel.
J'explique le besoin.
j'ai un fichier dont chaque ligne contiens une référence, un
description, et deux mesures (nombres à virgule). Ces valeurs sont
séparés par des points-virgules.
Les lignes sont triés selon les références.
Je dois juste caluler les moyennes des deux mesures pour chaque
référence et mettre cela dans un autre fichier.
Pouvez-vous m'aider ?
Merci.


--
Mjöllnir
Asgarr









Avatar
Mjöllnir
> "Mjöllnir" a écrit dans le message de news:




Bonjour,





j'ai un fichier dont chaque ligne contiens une référence, un
description, et deux mesures (nombres à virgule). Ces valeurs sont
séparés par des points-virgules.
Je dois juste caluler les moyennes des deux mesures pour chaque
référence et mettre cela dans un autre fichier.





Salut,

Voici la moyenne des 2 mesures par ligne, reversées du fichier csv.txt
au fichier moyenne.txt, ci-joint fichiers annexé.



Bonsoir,

Tout d'abord merci beaucoup à tous les deux.
Avec les exemple et la touche F1, j'arrive à comprendre comment ça
fonctionne.
J'ai testé le programe de LE TROLL. Cela fonctionne bien, mais sur
certain fichier j'ai une erreur. J'ai vu en utilisant le debogeur que
ca s'arrête sur une ligne du fichier qui ressemble a ca :
ref;"description;avec point-virgule";1,2;3,4

Pourtant je crois que le fichier est un csv tout a fait normal ? C'est
une exportation d'un autre programe. Est-ce difficile à résoudre ?

Je suis désolé aussi, mais on m'a demander aujourd'hui de traiter des
fichiers avec un commentaire en plus à la fin de chque ligne. Mais si
j'ai bien compris le programe, cela ne doit pas modifier beaucoup le
traitement.

Comme je n'ai pas de conection internet dans le journée je ne peux voir
vos réponses que le soir. Donc avec un peu de retard, merci encore. Je
vais essayé de revenir plus tard.


--
Mjöllnir
Asgarr
Avatar
Jean-Marc
"Mjöllnir" a écrit dans le message de
news:
> "Mjöllnir" a écrit dans le message de news:
>

>> Bonjour,

>> j'ai un fichier dont chaque ligne contiens une référence, un
>> description, et deux mesures (nombres à virgule). Ces valeurs sont
>> séparés par des points-virgules.
>> Je dois juste caluler les moyennes des deux mesures pour chaque
>> référence et mettre cela dans un autre fichier.

> Salut,
>
> Voici la moyenne des 2 mesures par ligne, reversées du fichier


csv.txt
> au fichier moyenne.txt, ci-joint fichiers annexé.

Bonsoir,

Tout d'abord merci beaucoup à tous les deux.
Avec les exemple et la touche F1, j'arrive à comprendre comment ça
fonctionne.
J'ai testé le programe de LE TROLL. Cela fonctionne bien, mais sur
certain fichier j'ai une erreur. J'ai vu en utilisant le debogeur que
ca s'arrête sur une ligne du fichier qui ressemble a ca :
ref;"description;avec point-virgule";1,2;3,4

Pourtant je crois que le fichier est un csv tout a fait normal ? C'est
une exportation d'un autre programe. Est-ce difficile à résoudre ?

Je suis désolé aussi, mais on m'a demander aujourd'hui de traiter des
fichiers avec un commentaire en plus à la fin de chque ligne. Mais si
j'ai bien compris le programe, cela ne doit pas modifier beaucoup le
traitement.

Comme je n'ai pas de conection internet dans le journée je ne peux voir
vos réponses que le soir. Donc avec un peu de retard, merci encore. Je
vais essayé de revenir plus tard.



Hello,

pour le commentaire en plus, ça ne changera pas le code de mon programme.
En effet, il utilise les paramètres la fonction Split(), qui découpe selon
les points vitrgule. Comme je récupère les 2 valeurs en position 3 et 4,
avec t(2) et t(3), ce n'est pas génant si il y a des champs en plus APRES
les valeurs.

Pour le cas du point virgule dans la description, on peut contourner le
problème en vérifiant que le premier caractère lu dans t(2) est un chiffre
ou une virgule.
Si ce n'est pas un chiffre, on saura alors qu'il
y a un point virgule dans la descritpion et qu'il faut du coup récupérer les
valeurs dans t(3) et t(4).

J'ai noté que tes nombres utilisaient la virgule comme séparateur décimal.
Il faut un tout petit peu adpater le code pour que cela fonctionne,
remplacer les Val par des Cdbl().

j'ai testé avec ceci:
A00001;"aquarium";100,23;78,12;parfois il y un compmentaire
A00002;"babaorum;et undrole de truc";42,21;39,12;"meme comme ça"
A00003;"petibonum";41,54;23,41

et voici la sortie:

89,175
40,665
32,475


Voici le programme modifié (à peine):

Private Sub Command1_Click()
Dim f As Integer
Dim g As Integer
Dim s As String
Dim t() As String
Dim v1 As Double, v2 As Double
Dim moy As Double
Dim nb As Long
Dim c As String

f = FreeFile
' adapter ceci pour désigner le bon fichier d'entrée
Open "c:jmtest.csv" For Input As #f

g = FreeFile
' adapter ceci pour désigner le bon fichier de sortie
Open "c:moyennes.txt" For Output As #g

' parcourir tout le fichier
While Not (EOF(f))
' lire une ligne complète
Line Input #f, s
' pour compter le nombre de lignes
nb = nb + 1
' la découper en champs, en indiquant le
' point-virgule comme séparateur
t() = Split(s, ";")

' t(2) contient le 3eme élément de chaque ligne
c = Mid$(t(2), 1, 1)
If (c < "0" Or c > "9") And (c <> ",") Then
' on saute d'un champ en avant
v1 = CDbl(t(3))
v2 = CDbl(t(4))
Else
v1 = CDbl(t(2))
v2 = CDbl(t(3))
End If
moy = (v1 + v2) / 2
' écriture dans le fichier de sortie
Print #g, moy
Wend
Close #g
Close #f
MsgBox "c'est fini, " & nb & " lignes lues."
End Sub

On pourrait faire mieux et faire du code vraiment protégé, mais
si ce n'est que pour un usage ponctuel ...

Bonen soirée!

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Fred
"Jean-Marc" a écrit dans le message de
news:430cc23e$0$3940$
"Mjöllnir" a écrit dans le message de
news:



> Bonsoir,
>
> Tout d'abord merci beaucoup à tous les deux.
> Avec les exemple et la touche F1, j'arrive à comprendre comment ça
> fonctionne.
> J'ai testé le programe de LE TROLL. Cela fonctionne bien, mais sur
> certain fichier j'ai une erreur. J'ai vu en utilisant le debogeur


que
> ca s'arrête sur une ligne du fichier qui ressemble a ca :
> ref;"description;avec point-virgule";1,2;3,4

Hello,

pour le commentaire en plus, ça ne changera pas le code de mon


programme.
En effet, il utilise les paramètres la fonction Split(), qui découpe


selon
les points vitrgule. Comme je récupère les 2 valeurs en position 3 et


4,
avec t(2) et t(3), ce n'est pas génant si il y a des champs en plus


APRES
les valeurs.

Pour le cas du point virgule dans la description, on peut contourner


le
problème en vérifiant que le premier caractère lu dans t(2) est un


chiffre
ou une virgule.



Salut Jean-Marc,
Juste une petite intervention rapide. Nous avions discuté des avantages
et inconvénients d'une telle méthode par rapport à une méthode d'accès
aux données. Je crois que dans le cas de Mjöllnir tu peux utiliser la
seconde. Son fichier me semble présenter des caractéristiques qui ne
supportent pas trop la toutouille ;-)
Et si jamais son besoin évolue, il pourra facilement adapter le
programme.
Je te laisse chercher le fil de notre discussion avec le bout de code
qui va bien et l'insérer dans ton programme. Je n'aurai pas le temps
encore aujourd'hui :-(

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Mjöllnir
> Salut Jean-Marc,
Juste une petite intervention rapide. Nous avions discuté des avantages
et inconvénients d'une telle méthode par rapport à une méthode d'accès
aux données. Je crois que dans le cas de Mjöllnir tu peux utiliser la
seconde. Son fichier me semble présenter des caractéristiques qui ne
supportent pas trop la toutouille ;-)
Et si jamais son besoin évolue, il pourra facilement adapter le
programme.
Je te laisse chercher le fil de notre discussion avec le bout de code
qui va bien et l'insérer dans ton programme. Je n'aurai pas le temps
encore aujourd'hui :-(



Bonsoir Jean-Marc et Fred,
Oui, si vous avez une autre méthode je veux bien l'essayé.
Sur certains fichier je n'ai pas de problèmes mais sur d'autres si.
Cela arrive si j'ai des points-virgules. Et j'ai aussi remarqué que les
guillemets restent dans le fichier de sortie. Et j'ai aussi des
guillemets en double.
Par exemple une description tel que : des "guillemets" dans le texte
devient : "des ""guillemets"" dans le texte"
Dans mon fichier de sortie je voudrais la description originale.


--
Mjöllnir
Asgarr
Avatar
LE TROLL
Heu, désolé de te déranger, mais les exemples produits ne génèrent pas
en sortie des guillemets en plus, un fichier texte géré sous VB n'ajoute rien,
suffit d'aller le constater (sauf paramètres spéciaux, ce qui n'est pas le cas
ici)...

Alors si tu as des doubles guillemets non voulus, ce n'est pas en lecture
des fichiers d'exemple, c'est dans l'enregistrement de ton fichier (inconnu),
avec une application inconnue je crois... C'est à ce niveau sans doute qu'il
faudrait intervenir, lors de l'enregistrement de ton fichier csv (datas séparées
normalement par des virgules, là par des points-virgules), et... je ne vois pas
trop comment on peut intervenir sur l'enregistrement de l'application de ton
fichier csv...

A part ça, pour enlever ce que tu as en trop, les méthode (dont le principe
est le même), permettent de la même façon d'enlever ce qui est indésirable, il
suffit de l'appliquer en la transposant, soit une recherche dans une chaîne,
puis un remplacement.
------------

"Mjöllnir" a écrit dans le message de news:

Salut Jean-Marc,
Juste une petite intervention rapide. Nous avions discuté des avantages
et inconvénients d'une telle méthode par rapport à une méthode d'accès
aux données. Je crois que dans le cas de Mjöllnir tu peux utiliser la
seconde. Son fichier me semble présenter des caractéristiques qui ne
supportent pas trop la toutouille ;-)
Et si jamais son besoin évolue, il pourra facilement adapter le
programme.
Je te laisse chercher le fil de notre discussion avec le bout de code
qui va bien et l'insérer dans ton programme. Je n'aurai pas le temps
encore aujourd'hui :-(



Bonsoir Jean-Marc et Fred,
Oui, si vous avez une autre méthode je veux bien l'essayé.
Sur certains fichier je n'ai pas de problèmes mais sur d'autres si.
Cela arrive si j'ai des points-virgules. Et j'ai aussi remarqué que les
guillemets restent dans le fichier de sortie. Et j'ai aussi des guillemets en
double.
Par exemple une description tel que : des "guillemets" dans le texte
devient : "des ""guillemets"" dans le texte"
Dans mon fichier de sortie je voudrais la description originale.


--
Mjöllnir
Asgarr




Avatar
Jean-Marc
"Mjöllnir" a écrit dans le message de
news:
> Salut Jean-Marc,
> Juste une petite intervention rapide. Nous avions discuté des avantages
> et inconvénients d'une telle méthode par rapport à une méthode d'accès
> aux données. Je crois que dans le cas de Mjöllnir tu peux utiliser la
> seconde. Son fichier me semble présenter des caractéristiques qui ne
> supportent pas trop la toutouille ;-)
> Et si jamais son besoin évolue, il pourra facilement adapter le
> programme.
> Je te laisse chercher le fil de notre discussion avec le bout de code
> qui va bien et l'insérer dans ton programme. Je n'aurai pas le temps
> encore aujourd'hui :-(

Bonsoir Jean-Marc et Fred,
Oui, si vous avez une autre méthode je veux bien l'essayé.
Sur certains fichier je n'ai pas de problèmes mais sur d'autres si.
Cela arrive si j'ai des points-virgules. Et j'ai aussi remarqué que les
guillemets restent dans le fichier de sortie. Et j'ai aussi des
guillemets en double.
Par exemple une description tel que : des "guillemets" dans le texte
devient : "des ""guillemets"" dans le texte"
Dans mon fichier de sortie je voudrais la description originale.



Hello,

sans doute quelques chose comme cela peut il résoudre ton problème:


'Export
'SrcPath : Répertoire contenant le fichier source
' se termine par le caractère
'SrcName : Nom du fichier source
'DstFullPath : Chemin complet du fichier destination
Sub Export( _
SrcPath As String, _
SrcName As String, _
DstFullPath As String)

Dim Handle As Integer
Handle = FreeFile
Open SrcPath & "schema.ini" For Output As #Handle
Print #Handle, "[" & UCase$(SrcName) & "]"
Print #Handle, "ColNameHeaderúlse"
Print #Handle, "CharacterSet=ANSI"
Print #Handle, "FormatÞlimited(;)"
Print #Handle, "Col1=Reference Char"
Print #Handle, "Col2Þscription Char"
Print #Handle, "Col3=Val1 Float"
Print #Handle, "Col4=Val2 Float"
Print #Handle, "Col5=Comment Char"
Close #Handle

Set oConnection = CreateObject( _
"ADODB.Connection")
oConnection.Open _
"Driver={Microsoft Text Driver " & _
"(*.txt; *.csv)};" & _
"Dbq=" & SrcPath & ";" & _
"Extensions=asc,csv,tab,txt"

Set oRecordSet = oConnection.Execute( _
"SELECT * FROM " & SrcName)

Handle = FreeFile
Open DstFullPath For Output As #Handle
While Not oRecordSet.EOF
Print #Handle, "---------------------------------------"
Print #Handle, "Référence : " & oRecordSet("Reference")
Print #Handle, "Description : " & oRecordSet("Description")
Print #Handle, "Moyenne : "; (CDbl(oRecordSet("Val1")) _
+ CDbl(oRecordSet("Val2"))) / 2
Print #Handle, "Commentaire : " & oRecordSet("Comment")
oRecordSet.MoveNext
Wend
Close #Handle
oConnection.Close
End Sub


Sub Test()
Export "C:test", "source.csv", "C:testdest.txt"
End Sub

Ca devrait marcher

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Mjöllnir
> Hello,



Bonsoir,

sans doute quelques chose comme cela peut il résoudre ton problème:


[code]
Ca devrait marcher



Oui ! Merci beaucoup. Cela fonctionne très bien. J'ai fait des tests
avec des fichiers qui contienne des points-virgule et des guillemets.
Ca me restitue bien les commentaires et descriptions initiales.

Et je vois comment adapter si on me demande autre chose.
Je me disais bien qu'il doit exister une méthode pour traiter ce genre
de fichier standard.

Bonne soirée.


--
Mjöllnir
Asgarr
1 2