Déplacement a l'interieur d'un fichier

damdam1 Messages postés 33 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 2 février 2004 - 13 janv. 2004 à 15:24
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 - 15 janv. 2004 à 13:56
Voici le code qui me pose des problémes je n' arrive pas même avec l'aide de VB 6.0(c'est la version que j'utilise) à me placer directement à la fin du fichier C:\\Documents and Settings\\Administrateur\\Bureau\\Simeltic\\Simelt\\HeatReport.dat . C juste pour vérifier les 5 premiers caracteres du dernier enregistrement d'un automate de régulation (qui écrit le fichier.dat)
Sub VerifPresence()
NfNew = FreeFile
Open "C:\\Documents and Settings\\Administrateur\\Bureau\\Simeltic\\Simelt\\HeatReport.dat" For Input As #NfNew
X = 1
While Not EOF(NfNew) ' Effectue la boucle jusqu'à la fin du fichier.
'Seek "=", Val(DernNo)
Line Input #NfNew, Chaine1 ' lit et affecte le contenu du fichier a Chaine1
'Découpe la chaine en troncon de "" -> xxx . Lignes Split(Chaine1, " xxx ") 'délimiteur xxx fin de lignes
For i = 0 To UBound(Lignes) 'on boucle pour chaque ligne
'Découpe la chaine en troncon à chaque virgule.
NumFic = Left(Lignes(0), 5)
MsgBox NumFic & " " & Left(Lignes(i), 5)
Next i ' ligne suivante

Wend

Close #NfNew
End Sub
D'avance merci et bonne année a tous
;)

5 réponses

ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
13 janv. 2004 à 18:38
1- Verifier que le chemin est bon

2-
si c'est un fichier texte ça doit marcher.
si c'est un fichier binaire, il faut changer de méthode.
0
damdam1 Messages postés 33 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 2 février 2004
14 janv. 2004 à 10:59
Le code fonctionne très bien mais je suis obligé de parcourir toutes les lignes alors que voudrez me placer directement à la derniére car a termes il risque d'y avoir des milliers de lignes et un traitement de plus en plus long, alors que les lignes ayant été parcourues une fois n'ont plus besoin d'être relues
;)
0
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
14 janv. 2004 à 22:46
Sub litcinqpremierscaracteresderniereligne()
Dim i As Integer    'numero du fichier ouvert
Dim adr             'adresse de lecture
Dim sep As String   'separateur xxx
Dim chaine As String 'chaine recherchant l'avant dernier séparateur
Dim chaine5 As String 'chaine de 5 octets
Dim fic As String   'nom fichier ouvert

fic = "C:\\\\Documents and Settings\\\\Administrateur\\\\Bureau\\\\Simeltic\\\\Simelt\\\\HeatReport.dat"

sep = "xxx" ' + vbCrLf
chaine = sep          'chaine dimentionnée comme le séparateur
chaine5 = Space(5)    'chaine de 5 caracteres

i = FreeFile          'ouverture fichier
Open fic For Binary As #i  'en mode binaire
    If LOF(i) > Len(sep) + 1 Then  'verifie qu'il y a un minimum de caractères dans ce fichier
        For adr = LOF(i) - Len(sep) - 2 To 1 Step -1 'recherche depuis la fin l'avant dernie séparateur
            Get #i, adr, chaine   'lit à l'adresse adr
            If chaine = sep Then  'verifie ce qu'il vient de lire
                Get #i, adr + Len(sep), chaine5  'si c'est bon,lire les 5 premiers caractères de la derniere ligne
                MsgBox chaine5  'message box!
                Exit For  'c'est fini
            End If  'fin vérif
        Next adr    'cherche adresse suivant
    End If   'fin vérif
Close #i  'ferme fichier
End Sub

0
damdam1 Messages postés 33 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 2 février 2004
15 janv. 2004 à 13:14
je viens d'essayer ton code Id40 et cane donne rien même pas la MsgBox qui s'affiche !! Mais je crois que c'est de ma faute j'avais oublié de te préciser que les enregistrement été du format suivant ( Il n'y a qu'une ligne ds l'exemple suivant)
18801,3171.000000,2627.000000,39713.089844,28435.468750,171.705017,181.663727,170.715317,174.694687,0.000000,0.000000,0.000000,0.000000,17.488623,18.670750,18.271353,54.430725,13.221932,13.473893,12.286666,38.982491,21.924221,23.024828,22.018276,66.950272,0.797681,0.810893,0.829823,0.813001,48.388184,51.186726,48.138630,49.237843,427.608185,422.983063,433.627869,428.073029,17.248585,18.402142,18.033791,53.684517,11.428534,11.407543,10.512697,33.348774,20.691183,21.651117,20.874252,63.199432,0.833616,0.849936,0.863921,0.849445,1.478910,1.451112,1.374536,1.434853,11.212272,12.566590,10.205596,11.328153,16.077877,17.092102,16.875126,50.045105,332.261810,333.910156,350.545380,338.905792,6.866590,6.523374,7.281997,6.883035,141.936508,151.638718,157.172394,150.249542,94.467178,100.924576,104.607567,43,0,0,2.000000,2624.000000,2627.000000,2627.000000,3.000000,0.000000,0.000000,18.000000,44.000000,17.000000,82.844528,20.482632,5.000000,2.000000, xxx
Je crois que c a cause des virgules (??) de plus la msdn ( rubrique open) dit :"La clause Len n'est pas prise en compte si l'argument mode a la valeur Binary." ca peut venir de la aussi.Qu'en penses tu?

;)
0

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

Posez votre question
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
15 janv. 2004 à 13:56
Evidemment mon exemple suppose plusieurs choses:

la premiere c'est que le chemin du fichier est correct.
pour le savoir, rajoute apres la ligne "open":

msgbox lof(i)


si lof(i)=0 c'est que le chemin n'est pas correct et qu'il a crée un fichier de 0 octet ailleur :-(

la seconde, c'est que le fichier finit par "xxx" et rien d'autre.
si il y a un retour à la ligne apres "xxx", il faut écrire:
au lieu de sep = "xxx" ' + vbCrLf
sep = "xxx"  + vbCrLf


les virgules n'ont pas d'influence.

si apres ces observations, ça ne marche toujours pas,
envoi alors un petit fichier dat de qques lignes à l'adresse suivante:
ld40@ifrance.com
0
Rejoignez-nous