Je désirerais extraire les X dernieres lignes d'un fichier texte.
J'y arrive sans probleme en balayant le fichier du debut a la fin pour
savoir combien le fichier possede de lignes mais je trouve que ce n'est pas
génial.
Connaissez vous un autre moyen ?
Merci
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zoury
Bonjour Jean ! :O)
Si ton fichier n'est pas trop gros, tu peux le lire en entier d'un seul coup et effectuer un Split() sur le retour de chariot afin de déterminer rapidement le nombre de ligne total en plus de permettre de retourner rapidement les X dernière lignes souhaitées.
Ex : '*** Option Explicit
Private Sub Form_Load()
Debug.Print GetLastLines("c:file2.txt", 3)
End Sub
Private Function GetLastLines(ByVal FileName As String, ByVal LineCount As Long) As String
Dim hFile As Long Dim sContent As String Dim sLines() As String Dim nUBound As Long Dim i As Long
' lit le contenu du fichier hFile = FreeFile Open FileName For Binary As #hFile sContent = Space$(LOF(hFile)) Get #hFile, , sContent Close #hFile
' retourne les dernières lignes sLines = Split(sContent, vbNewLine) nUBound = UBound(sLines) For i = nUBound - LineCount + 1 To nUBound GetLastLines = GetLastLines & sLines(i) & vbNewLine Next i
End Function '***
Tu peux également employer ma classe CFile pour effectuer cette tâche : '*** Option Explicit
Private Sub Form_Load()
Debug.Print GetLastLines("c:file2.txt", 3)
End Sub
Private Function GetLastLines(ByVal FileName As String, ByVal LineCount As Long) As String
Dim f As CFile ' fichier à lire Dim f2 As CFile ' sert de StringBuilder... Dim i As Long
Set f = New CFile Set f2 = New CFile
' ouvre le fichier Call f.OpenFile(FileName)
' obtient les dernière lignes For i = f.LineCount - LineCount + 1 To f.LineCount Call f2.AppendLine(f.Lines(i)) Next i
GetLastLines = f2.Text
End Function '***
Voir ici pour ma classe : http://groups.google.com/groups?selm=%235a%244WKVFHA.616%40TK2MSFTNGP12.phx.gbl
-- Cordialement Yanick MVP pour Visual Basic
"Jean Naimard" a écrit dans le message de news:dbgkan$f39$
Bonjour,
Je désirerais extraire les X dernieres lignes d'un fichier texte. J'y arrive sans probleme en balayant le fichier du debut a la fin pour savoir combien le fichier possede de lignes mais je trouve que ce n'est
pas
génial. Connaissez vous un autre moyen ? Merci
Bonjour Jean ! :O)
Si ton fichier n'est pas trop gros, tu peux le lire en entier d'un seul coup
et effectuer un Split() sur le retour de chariot afin de déterminer
rapidement le nombre de ligne total en plus de permettre de retourner
rapidement les X dernière lignes souhaitées.
Ex :
'***
Option Explicit
Private Sub Form_Load()
Debug.Print GetLastLines("c:file2.txt", 3)
End Sub
Private Function GetLastLines(ByVal FileName As String, ByVal LineCount As
Long) As String
Dim hFile As Long
Dim sContent As String
Dim sLines() As String
Dim nUBound As Long
Dim i As Long
' lit le contenu du fichier
hFile = FreeFile
Open FileName For Binary As #hFile
sContent = Space$(LOF(hFile))
Get #hFile, , sContent
Close #hFile
' retourne les dernières lignes
sLines = Split(sContent, vbNewLine)
nUBound = UBound(sLines)
For i = nUBound - LineCount + 1 To nUBound
GetLastLines = GetLastLines & sLines(i) & vbNewLine
Next i
End Function
'***
Tu peux également employer ma classe CFile pour effectuer cette tâche :
'***
Option Explicit
Private Sub Form_Load()
Debug.Print GetLastLines("c:file2.txt", 3)
End Sub
Private Function GetLastLines(ByVal FileName As String, ByVal LineCount As
Long) As String
Dim f As CFile ' fichier à lire
Dim f2 As CFile ' sert de StringBuilder...
Dim i As Long
Set f = New CFile
Set f2 = New CFile
' ouvre le fichier
Call f.OpenFile(FileName)
' obtient les dernière lignes
For i = f.LineCount - LineCount + 1 To f.LineCount
Call f2.AppendLine(f.Lines(i))
Next i
GetLastLines = f2.Text
End Function
'***
Voir ici pour ma classe :
http://groups.google.com/groups?selm=%235a%244WKVFHA.616%40TK2MSFTNGP12.phx.gbl
--
Cordialement
Yanick
MVP pour Visual Basic
"Jean Naimard" <Jean_Naimard@ralebol.fr> a écrit dans le message de
news:dbgkan$f39$1@apollon.grec.isp.9tel.net...
Bonjour,
Je désirerais extraire les X dernieres lignes d'un fichier texte.
J'y arrive sans probleme en balayant le fichier du debut a la fin pour
savoir combien le fichier possede de lignes mais je trouve que ce n'est
Si ton fichier n'est pas trop gros, tu peux le lire en entier d'un seul coup et effectuer un Split() sur le retour de chariot afin de déterminer rapidement le nombre de ligne total en plus de permettre de retourner rapidement les X dernière lignes souhaitées.
Ex : '*** Option Explicit
Private Sub Form_Load()
Debug.Print GetLastLines("c:file2.txt", 3)
End Sub
Private Function GetLastLines(ByVal FileName As String, ByVal LineCount As Long) As String
Dim hFile As Long Dim sContent As String Dim sLines() As String Dim nUBound As Long Dim i As Long
' lit le contenu du fichier hFile = FreeFile Open FileName For Binary As #hFile sContent = Space$(LOF(hFile)) Get #hFile, , sContent Close #hFile
' retourne les dernières lignes sLines = Split(sContent, vbNewLine) nUBound = UBound(sLines) For i = nUBound - LineCount + 1 To nUBound GetLastLines = GetLastLines & sLines(i) & vbNewLine Next i
End Function '***
Tu peux également employer ma classe CFile pour effectuer cette tâche : '*** Option Explicit
Private Sub Form_Load()
Debug.Print GetLastLines("c:file2.txt", 3)
End Sub
Private Function GetLastLines(ByVal FileName As String, ByVal LineCount As Long) As String
Dim f As CFile ' fichier à lire Dim f2 As CFile ' sert de StringBuilder... Dim i As Long
Set f = New CFile Set f2 = New CFile
' ouvre le fichier Call f.OpenFile(FileName)
' obtient les dernière lignes For i = f.LineCount - LineCount + 1 To f.LineCount Call f2.AppendLine(f.Lines(i)) Next i
GetLastLines = f2.Text
End Function '***
Voir ici pour ma classe : http://groups.google.com/groups?selm=%235a%244WKVFHA.616%40TK2MSFTNGP12.phx.gbl
-- Cordialement Yanick MVP pour Visual Basic
"Jean Naimard" a écrit dans le message de news:dbgkan$f39$
Bonjour,
Je désirerais extraire les X dernieres lignes d'un fichier texte. J'y arrive sans probleme en balayant le fichier du debut a la fin pour savoir combien le fichier possede de lignes mais je trouve que ce n'est
pas
génial. Connaissez vous un autre moyen ? Merci
Fred
Dans son message dbgkan$f39$ Jean Naimard nous dit :
Bonjour,
Je désirerais extraire les X dernieres lignes d'un fichier texte. J'y arrive sans probleme en balayant le fichier du debut a la fin pour savoir combien le fichier possede de lignes mais je trouve que ce n'est pas génial. Connaissez vous un autre moyen ? Merci
Bonsoir, C'est l'occasion de ressortir ce bon vieux buffer FIFO (first in first out).
Dim fifo(X-1) As String Dim idx As Integer idx=0 ..... While Not EOF(fichier) Line Input fichier, fifo(idx) If idx=X-1 Then idx=0 Else idx=idx+1 Wend ....
Voilà, en sortie de boucle (ma syntaxe est peut-être un peu défaillante comme ma mémoire), le tableau fifo contient les X dernières lignes du fichier. Et ceci en une seule passe avec un minimum d'occupation mémoire. Si l'ordre des lignes a une importance alors : La première de ces X dernières lignes est à la position idx La seconde à la position idx+1 (ou 0 si idx=X-1) ... La dernière est à la position idx-1 (ou X-1 si idx=0)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Dans son message dbgkan$f39$1@apollon.grec.isp.9tel.net
Jean Naimard nous dit :
Bonjour,
Je désirerais extraire les X dernieres lignes d'un fichier texte.
J'y arrive sans probleme en balayant le fichier du debut a la fin pour
savoir combien le fichier possede de lignes mais je trouve que ce
n'est pas génial.
Connaissez vous un autre moyen ?
Merci
Bonsoir,
C'est l'occasion de ressortir ce bon vieux buffer FIFO (first in first
out).
Dim fifo(X-1) As String
Dim idx As Integer
idx=0
.....
While Not EOF(fichier)
Line Input fichier, fifo(idx)
If idx=X-1 Then idx=0 Else idx=idx+1
Wend
....
Voilà, en sortie de boucle (ma syntaxe est peut-être un peu défaillante
comme ma mémoire), le tableau fifo contient les X dernières lignes du
fichier. Et ceci en une seule passe avec un minimum d'occupation
mémoire.
Si l'ordre des lignes a une importance alors :
La première de ces X dernières lignes est à la position idx
La seconde à la position idx+1 (ou 0 si idx=X-1)
...
La dernière est à la position idx-1 (ou X-1 si idx=0)
Dans son message dbgkan$f39$ Jean Naimard nous dit :
Bonjour,
Je désirerais extraire les X dernieres lignes d'un fichier texte. J'y arrive sans probleme en balayant le fichier du debut a la fin pour savoir combien le fichier possede de lignes mais je trouve que ce n'est pas génial. Connaissez vous un autre moyen ? Merci
Bonsoir, C'est l'occasion de ressortir ce bon vieux buffer FIFO (first in first out).
Dim fifo(X-1) As String Dim idx As Integer idx=0 ..... While Not EOF(fichier) Line Input fichier, fifo(idx) If idx=X-1 Then idx=0 Else idx=idx+1 Wend ....
Voilà, en sortie de boucle (ma syntaxe est peut-être un peu défaillante comme ma mémoire), le tableau fifo contient les X dernières lignes du fichier. Et ceci en une seule passe avec un minimum d'occupation mémoire. Si l'ordre des lignes a une importance alors : La première de ces X dernières lignes est à la position idx La seconde à la position idx+1 (ou 0 si idx=X-1) ... La dernière est à la position idx-1 (ou X-1 si idx=0)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Jean Naimard
Merci pour ces infos Je vais essayer ça demain !!
"Fred" a écrit dans le message de news: #
Dans son message dbgkan$f39$ Jean Naimard nous dit :
> Bonjour, > > Je désirerais extraire les X dernieres lignes d'un fichier texte. > J'y arrive sans probleme en balayant le fichier du debut a la fin pour > savoir combien le fichier possede de lignes mais je trouve que ce > n'est pas génial. > Connaissez vous un autre moyen ? > Merci
Bonsoir, C'est l'occasion de ressortir ce bon vieux buffer FIFO (first in first out).
Dim fifo(X-1) As String Dim idx As Integer idx=0 ..... While Not EOF(fichier) Line Input fichier, fifo(idx) If idx=X-1 Then idx=0 Else idx=idx+1 Wend ....
Voilà, en sortie de boucle (ma syntaxe est peut-être un peu défaillante comme ma mémoire), le tableau fifo contient les X dernières lignes du fichier. Et ceci en une seule passe avec un minimum d'occupation mémoire. Si l'ordre des lignes a une importance alors : La première de ces X dernières lignes est à la position idx La seconde à la position idx+1 (ou 0 si idx=X-1) ... La dernière est à la position idx-1 (ou X-1 si idx=0)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Merci pour ces infos
Je vais essayer ça demain !!
"Fred" <foleide@libre.france> a écrit dans le message de news:
#tf6bb8iFHA.3436@tk2msftngp13.phx.gbl...
Dans son message dbgkan$f39$1@apollon.grec.isp.9tel.net
Jean Naimard nous dit :
> Bonjour,
>
> Je désirerais extraire les X dernieres lignes d'un fichier texte.
> J'y arrive sans probleme en balayant le fichier du debut a la fin pour
> savoir combien le fichier possede de lignes mais je trouve que ce
> n'est pas génial.
> Connaissez vous un autre moyen ?
> Merci
Bonsoir,
C'est l'occasion de ressortir ce bon vieux buffer FIFO (first in first
out).
Dim fifo(X-1) As String
Dim idx As Integer
idx=0
.....
While Not EOF(fichier)
Line Input fichier, fifo(idx)
If idx=X-1 Then idx=0 Else idx=idx+1
Wend
....
Voilà, en sortie de boucle (ma syntaxe est peut-être un peu défaillante
comme ma mémoire), le tableau fifo contient les X dernières lignes du
fichier. Et ceci en une seule passe avec un minimum d'occupation
mémoire.
Si l'ordre des lignes a une importance alors :
La première de ces X dernières lignes est à la position idx
La seconde à la position idx+1 (ou 0 si idx=X-1)
...
La dernière est à la position idx-1 (ou X-1 si idx=0)
Dans son message dbgkan$f39$ Jean Naimard nous dit :
> Bonjour, > > Je désirerais extraire les X dernieres lignes d'un fichier texte. > J'y arrive sans probleme en balayant le fichier du debut a la fin pour > savoir combien le fichier possede de lignes mais je trouve que ce > n'est pas génial. > Connaissez vous un autre moyen ? > Merci
Bonsoir, C'est l'occasion de ressortir ce bon vieux buffer FIFO (first in first out).
Dim fifo(X-1) As String Dim idx As Integer idx=0 ..... While Not EOF(fichier) Line Input fichier, fifo(idx) If idx=X-1 Then idx=0 Else idx=idx+1 Wend ....
Voilà, en sortie de boucle (ma syntaxe est peut-être un peu défaillante comme ma mémoire), le tableau fifo contient les X dernières lignes du fichier. Et ceci en une seule passe avec un minimum d'occupation mémoire. Si l'ordre des lignes a une importance alors : La première de ces X dernières lignes est à la position idx La seconde à la position idx+1 (ou 0 si idx=X-1) ... La dernière est à la position idx-1 (ou X-1 si idx=0)