[VB6] fichier

Fermé
sadya - 27 juil. 2005 à 13:19
 arf - 2 avril 2007 à 10:13
bonjour forum,

jai un fichier txt dont les données sont comme suit


38482,59555 10,19
38482,59565 10,187
38482,59576 10,221

j'ai fait le programme suivant

Private Sub Form_Load()
Dim var1, var2 As Double
Dim ndata As Long
Dim i As Integer
Open "C:\Fichier2.txt" For Input As #1
Open "C:\toto.txt" For Output As #2
ndata = 1
Do While ((Not EOF(1)) And (ndata <= 200))
Input #1, var1, var2
Print #2, var1, var2
ndata = ndata + 1
Loop
Close #1

Close #2

End Sub

il donne ce resultat

38482 59555
10 19
38482 59565
10 187
38482 59576
10 221
38482 59586

Est ce que vous avez une idée

merci d'avance
A voir également:

17 réponses

byakhlefncr Messages postés 260 Date d'inscription vendredi 1 juillet 2005 Statut Membre Dernière intervention 11 septembre 2008 63
27 juil. 2005 à 13:51
Salut,

J'ai essayé ton code mais il donne un résultat correct

38482 59555
10 19
38482 59565
10 187
38482 59576
10 221
0
salut byakhlefncr,
le resultat correct doit etre comme suit

38482,59555 10,19
38482,59565 10,187
38482,59576 10,221

le programme enléve les virgules je ne sais pourquoi?

merci pour ton aide
0
byakhlefncr Messages postés 260 Date d'inscription vendredi 1 juillet 2005 Statut Membre Dernière intervention 11 septembre 2008 63
27 juil. 2005 à 14:41
Le problème est lié au ',' qui représente la séparation entre la fraction et la partie entiere

en remplaçant par '.' on obtient le résultat suivant :
38482,59555 10,19
38482,59565 10,187
38482,59576 10,221

Bonne chance
0
Re
Mais comment remplacer "," par "." si le fichier comporte des milliers de valeurs?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
byakhlefncr Messages postés 260 Date d'inscription vendredi 1 juillet 2005 Statut Membre Dernière intervention 11 septembre 2008 63
27 juil. 2005 à 15:34
Tu pourras remplacer les "," en"." avec le bloc note dans le menu edition --> remplacer --> "," par "." --> Remplacer tout

Bonne cance
0
Re
merci pour ton aide mais je ne pense pas que ca va resoudre le probléme car j'ai plusieurs fichiers txt à traiter
0
Utilisateur anonyme
27 juil. 2005 à 23:35
Bonjour,

Suggestion :

Dim var1, var2 As Double
Dim fic1, fic2 As Integer
Dim ndata As Long
Dim i, j As Integer

fic1 = FreeFile
Open "C:\Fichier2.txt" For Input As #fic1
fic2 = FreeFile
Open "C:\toto.txt" For Output As #fic2
ndata = 1

Do While ((Not EOF(fic1)) And (ndata <= 200))
    Line Input #fic1, var1
    j = InStr(1, var1, " ", vbTextCompare)
    var2 = CDbl(Mid(var1, (j + 1)))
    var1 = CDbl(Mid(var1, 1, (j - 1)))
    Print #fic2, var1, var2
    ndata = ndata + 1
Loop

Close #fic1

Close #fic2


Lupin
0
bonjour lupin

le programme fonctionne bien mais il faut ajouter on error resume next avant

var2 = CDbl(Mid(var1, (j + 1)))
si non on aura une erreur de type non compatible

merci pour ton aide
0
Utilisateur anonyme
28 juil. 2005 à 21:38
re:

Mon côté perfectionniste me pousse a te suggérer ceci :
Dim var1, tmp As Variant
Dim varDBL1, varDBL2 As Double
Dim fic1, fic2 As Integer
Dim ndata As Long
Dim i, j As Integer

fic1 = FreeFile
Open "C:\Fichier2.txt" For Input As #fic1
fic2 = FreeFile
Open "C:\toto.txt" For Output As #fic2
ndata = 1

Do While ((Not EOF(fic1)) And (ndata <= 200))
    Line Input #fic1, var1
    j = InStr(1, var1, " ", vbTextCompare)
    tmp = Mid(var1, (j + 1))
    varDBL2 = CDbl(tmp)
    tmp = Mid(var1, 1, (j - 1))
    varDBL1 = CDbl(tmp)
    Print #fic2, var1, var2
    ndata = ndata + 1
Loop

Close #fic1

Close #fic2


Explication :

On m'a apprit que lorsque l'on effectue une lecture, on devrait
toujours lire en variant, car on ne sait pas toujours ce qui est à
lire. Une fois la lecture effectué, on la contrôle en effectuant
des conversions.

Est-ce que cela aura un sens pour toi ???

Lupin
0
salut lupin,

j'ai changer un peu le code mais ca ne marche pas a tu une idée?

merci

Dim var1, tmp As Variant
Dim varDBL1, varDBL2 As Double
Dim fic1, fic2 As Integer
Dim ndata As Long
Dim i, j As Integer
Dim tab1() As Double
Dim tab2() As Double
Dim somme1 As Double
Dim somme2 As Double
fic1 = FreeFile
Open "C:\Fichier2.txt" For Input As #fic1
fic2 = FreeFile
Open "C:\toto.txt" For Output As #fic2
ndata = 1

Do While ((Not EOF(fic1)) And (ndata <= 200))
Line Input #fic1, var1
j = InStr(1, var1, " ", vbTextCompare)
tmp = Mid(var1, (j + 1))
On Error Resume Next
varDBL2 = CDbl(tmp)
tmp = Mid(var1, 1, (j - 1))
varDBL1 = CDbl(tmp)
'Print #fic2, var1, var2
tab1(i) = varDBL1
tab2(i) = varDBL2
ndata = ndata + 1
i = i + 1
Loop
somme1 = 0
somme2 = 0
For i = 1 To 200
somme1 = somme1 + tab1(i)
somme2 = somme2 + tab2(i)
Next i
Print #fic2, somme1, somme2
Close #fic1

Close #fic2
0
Utilisateur anonyme
29 juil. 2005 à 12:59
rebonjour,

au premier coup d'oeil, il me semble que la variable i n'est
pas initialisé avant l'entrée dans la boucle while !

Et il te faudra effectuer un ReDim de la variable tab() dans
la boucle du while. La je quitte pour le boulot, mais ce soir
je pourrai te coder quelques lignes si tu n'y arrive pas.

Lupin
0
Re

j'ai initialisé i et redimtab mais ca ne donne rien

merci pour ton aide
0
Utilisateur anonyme
29 juil. 2005 à 15:22
re:

voilà, ce code fonctionne bien chez moi :-)

    Dim var1, tmp As Variant
    Dim varDBL1, varDBL2 As Double
    Dim fic1, fic2 As Integer
    Dim ndata As Long
    Dim i, j As Integer
    Dim tab1() As Double
    Dim tab2() As Double
    Dim somme1 As Double
    Dim somme2 As Double
    
    fic1 = FreeFile
    Open "C:\Fichier2.txt" For Input As #fic1
    fic2 = FreeFile
    Open "C:\toto.txt" For Output As #fic2
    ndata = 1
    i = 1
    
    Do While ((Not EOF(fic1)) And (ndata <= 200))
        Line Input #fic1, var1
        j = InStr(1, var1, " ", vbTextCompare)
        tmp = Mid(var1, (j + 1))
        varDBL2 = CDbl(tmp)
        tmp = Mid(var1, 1, (j - 1))
        varDBL1 = CDbl(tmp)
        'Print #fic2, var1, var2
        ReDim Preserve tab1(i) As Double
        ReDim Preserve tab2(i) As Double
        tab1(i) = varDBL1
        tab2(i) = varDBL2
        ndata = ndata + 1
        i = i + 1
    Loop
    
    somme1 = 0
    somme2 = 0
    For j = 1 To i
        somme1 = somme1 + tab1(j)
        somme2 = somme2 + tab2(j)
    Next j
    Print #fic2, somme1, somme2
    
    Close #fic1
    Close #fic2


Lupin
0
salut lupin

je vais tester ton code ce soir et apré je te dirai

merci
0
bonjour lupin

j'ai tester le code mais j'ai une erreur "13" type incompatible au niveau de varDBL2 = CDbl(tmp)

si je met on error resume next ya plus d'erreur mais il calcul pas

c'est bizare

merci
0
Utilisateur anonyme
4 août 2005 à 01:24
Bonjour sadya,

En fait, je n'ai pas retesté le code puisqu'il fonctionne
bien avec l'énoncé que tu avais proposé.

Si le code plante, c'est a penser que la structure du fichier
n'est pas constante.

Ex.:

38482,59555 10,19 
                          10,187 
38482,59576 10,221 
38482,59557   
38482,59568 10,192


ici sur les lignes 2 et 4 il y a possibilité de "bug".

Je te recommande, de valider la structure du fichier
en effectuant plusieurs passage.

Ex.:
    Const LngMin = 15 'Longueur minimum d'une ligne

    Dim var1, tmp As Variant
    Dim fic1, fic2 As Integer
    Dim i, j As Integer
    
    fic1 = FreeFile
    Open "C:\Fichier2.txt" For Input As #fic1
    fic2 = FreeFile
    Open "C:\toto.txt" For Output As #fic2
    i = 1
    Do While ((Not EOF(fic1)) And (ndata <= 200))
        Line Input #fic1, var1
        j = Len(var1)
        If (j < LngMin) Then
            Print #fic2, i, var1
        End If
        i = (i + 1)
    Loop
    
    Close #fic1
    Close #fic2


dans cet exemple, je vérifie la longueur minimum d'une ligne.
en cas d'erreur, la ligne et la valeur sont sauvegarder dans
le deuxième fichier.

en fait, c'est la façon de faire en SAS, on appelle cela
des observations, plutôt que de tout chambouler d'un
coup, on effectue plusieurs passages et à chaque passage
on effectue une "observation"/"opération", ... disons
une explication simple.

Plus loin que cela, il faudra après la lecture de la ligne,
valider la structure de chaque lignes,

... le nombre de caractères
... le nombre d'espaces
... le nombre de virgule
... etc...

Bon courage pour la suite, je demeure disponible si tu as
des questions.

N.B. Cette façon de travailler est une parmi tant d'autres,
quelqu'un d'autres aura peut-être de bonnes idées.
ex.: ouvrir le fichier texte avec EXCEL pour le formatter.

Lupin
0
essaie d'utiliser le ";" comme séparateur plutôt que la ",". normalement ça marche très bien.
0