OVH Cloud OVH Cloud

lecture d'un fichier texte depuis la fin

5 réponses
Avatar
Flyer-Flo
Bonjour,
Je fait un programme qui doit comparer deux fichiers texte=20
qui contiennent des nombres et je dois comparrer des=20
nombres du premier ficher avec des nombres du 2=E8me. Pour=20
le premier fichier je dois le lire normalement en=20
commencant depuis le d=E9but. Pour cela je n'ai pas de=20
probl=E8me mais lorsque je vais dans le 2=E8me fichier, il=20
faut que je commence =E0 le lire depuis la fin et de=20
remonter ligne par ligne. Je ne trouve pas comment lire ce=20
fichier =E0 l'envert. Si quelqu'un pouvais m'aider...

bonne journ=E9e et merci d'avance !

5 réponses

Avatar
François Picalausa
"Flyer-Flo" a écrit dans le message de
news:06b901c3bd6d$f7dd0d50$
Bonjour,
Je fait un programme qui doit comparer deux fichiers texte
qui contiennent des nombres et je dois comparrer des
nombres du premier ficher avec des nombres du 2ème. Pour
le premier fichier je dois le lire normalement en
commencant depuis le début. Pour cela je n'ai pas de
problème mais lorsque je vais dans le 2ème fichier, il
faut que je commence à le lire depuis la fin et de
remonter ligne par ligne. Je ne trouve pas comment lire ce
fichier à l'envert. Si quelqu'un pouvais m'aider...

bonne journée et merci d'avance !



Bonjour/soir,

Tu veux dire quelquechose comme ceci:
Dim File1() As String 'Lignes du fichier n°1
Dim File2() As String 'Lignes du fichier n°2
Dim strBuffer As String 'Buffer temporaire
Dim FFN As Integer 'Numéro de fichier libre
Dim i As Long 'Variable pour une boucle
Dim Min As Long

FFN = FreeFile 'retrouver un numéro de fichier libre

'ouvre le fichier
Open "c:monfichier1.txt" For Binary As FFN
'initialise le buffer
strBuffer = String$(LOF(FFN), vbNullChar)
'remplis le buffer du contenu du fichier
Get strBuffer, , FFN
'converti le contenu en tableau de lignes
File1 = Split(strBuffer, vbCrLf)
Close FFN


'idem pour le fichier n°2
Open "c:monfichier2.txt" For Binary As FFN
strBuffer = String$(LOF(FFN), vbNullChar)
Get strBuffer, , FFN
File2 = Split(strBuffer, vbCrLf)
Close FFN

Min = UBound(File1)
If UBound(File2) < Min Then Min = UBound(File2)

For i = 0 To Min
If (File1(i) <> File2(UBound(File2) - i)) Then
'ou If (File1(i) <> File2(Min - i)) Then
Debug.Print "Différence trouvée pour la ligne " & i
End If
Next i

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
Flyer-Flo
Re bonjour

Merci pour l'aide mais il me faudrais juste le code pour
pouvoir lire un fichier en commencant pas la dernière
ligne et après remonter ligne par ligne...

car pour comparrer les nombre c'est beaucoup plus
compliqué que ca..

salutation
Avatar
François Picalausa
"Flyer-Flo" a écrit dans le
message de news:06f201c3bd73$a22cce80$
Merci pour l'aide mais il me faudrais juste le code pour
pouvoir lire un fichier en commencant pas la dernière
ligne et après remonter ligne par ligne...



Bonjour/soir,

Après stoquage dans le tableau File2, tu peux simplement changer la boucle:
For i = Ubound(File2) To 0 Step -1
Debug.Print File2(i)
Next i
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
h.bezard
Bonjour,
je parcours le NG et je tombe sur ton code que je trouve bien malin, mais
n'y a t'il pas une limite de taille avec les tableau?
peux t'on ouvrir un fichier texte de n'importe quelle taille?

Merci d'avance

voyageur
Avatar
François Picalausa
"h.bezard" a écrit dans le
message de news:3fd62ee2$0$6980$
Bonjour,
je parcours le NG et je tombe sur ton code que je trouve bien malin,
mais n'y a t'il pas une limite de taille avec les tableau?
peux t'on ouvrir un fichier texte de n'importe quelle taille?

Merci d'avance

voyageur



Bonjour/soir,

je viens de reparcourir
Visual Basic Specifications, Limitations, and File Formats:
http://msdn.microsoft.com/library/en-us/vbcon98/html/vbconvisualbasicspecificationslimitationsfileformats.asp

mais je ne vois pas de limitation à ce niveau (mis à part les ressources
système qui peuvent prendre un coup... ouch)

Mais si tu as de très gros fichier, une solution de File Mapping est
peut-être plus appropriée:
http://msdn.microsoft.com/library/en-us/fileio/base/file_mapping.asp

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com