OVH Cloud OVH Cloud

Modifier un fichier Texte

19 réponses
Avatar
Jessy Sempere [MVP]
Bonjour à tous

Je ne me rappelle plus comment on fait en VBA pour modifier
un fichier texte, en fait je veux supprimer des lignes dans le
fichier ?

Merci

@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

9 réponses

1 2
Avatar
Gafish
A adapter :

Dim monFso As Scripting.FileSystemObject
Dim monStrm As Scripting.TextStream
Dim lgnTmp As String
Set monFso = New Scripting.FileSystemObject

' Ouverture
Set monStrm = monFso.GetFile(strFile).OpenAsTextStream(ForReading)

'parcours du fichier
Do While Not monStrm.AtEndOfStream
lgnTmp = monStrm.ReadLine
Loop

Set monStrm = Nothing
Set monFso = Nothing



Ce code lit ligne à ligne, tu peux très bien avec un compteur zapper les
quatre premières et copier les autres dans un deuxième fichier.
Pour l'écriture, utilises writeline au lieu de readline.




"Gafish" a écrit dans le message de news:
eLsgEE%
Bonjour,

En utilisant fileSystemObject ? Peut etre un peu lourd si tu veux
simplement supprimer des lignes, mais à voir.

Arnaud

"Jessy Sempere [MVP]" a écrit dans le message
de news: 41e3d08b$
Bonjour à tous

Je ne me rappelle plus comment on fait en VBA pour modifier
un fichier texte, en fait je veux supprimer des lignes dans le
fichier ?

Merci

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------








Avatar
Raymond [mvp]
Tu as toutes les fonctions sur la page:
http://officesystem.access.free.fr/scr_scripting_runtime.htm
détail dans les pages : http://officesystem.access.free.fr/scr_textfile.htm
tu prends un fileopen input , un fileopen output, un fileskipline 4 fois, un
readall, un filewrite dans le nouveau fichier et un close des deux
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jessy Sempere [MVP]" a écrit dans le message de
news: 41e3da10$
Ben écoutes ça ne doit pas être sorcier...
Je veux juste supprimer les 4 premières lignes de mon fichier ????

--
@+
Jessy Sempere - Access MVP


Avatar
Jessy Sempere [MVP]
Ok merci

Donc on ne peut pas supprimer directement les lignes
dans le fichier, il faut créer un autre fichier sans les lignes
à retirer, c'est dommage...

Mon fichier fait quand même 30000 lignes, c'est dommage
de devoir toutes les parcourir juste pour retirer les 4 premières. ;-(

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Gafish" a écrit dans le message news:
OpsBGa#
A adapter :

Dim monFso As Scripting.FileSystemObject
Dim monStrm As Scripting.TextStream
Dim lgnTmp As String
Set monFso = New Scripting.FileSystemObject

' Ouverture
Set monStrm = monFso.GetFile(strFile).OpenAsTextStream(ForReading)

'parcours du fichier
Do While Not monStrm.AtEndOfStream
lgnTmp = monStrm.ReadLine
Loop

Set monStrm = Nothing
Set monFso = Nothing



Ce code lit ligne à ligne, tu peux très bien avec un compteur zapper les
quatre premières et copier les autres dans un deuxième fichier.
Pour l'écriture, utilises writeline au lieu de readline.




"Gafish" a écrit dans le message de news:
eLsgEE%
Bonjour,

En utilisant fileSystemObject ? Peut etre un peu lourd si tu veux
simplement supprimer des lignes, mais à voir.

Arnaud

"Jessy Sempere [MVP]" a écrit dans le
message


de news: 41e3d08b$
Bonjour à tous

Je ne me rappelle plus comment on fait en VBA pour modifier
un fichier texte, en fait je veux supprimer des lignes dans le
fichier ?

Merci

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------












Avatar
Jessy Sempere [MVP]
En résumé voici mon code :
**************************************************
Function ImportData()

Dim strFile As String
Dim tabFile() As Variant
Dim lngTab As Long, lngLine As Long
Dim fs As FileSystemObject
Dim ts As TextStream

strFile = CurrentProject.Path & "ParcAuto.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(strFile, ForReading)

Do While Not ts.AtEndOfStream
lngTab = lngTab + 1
ReDim Preserve tabFile(lngTab)
tabFile(lngTab) = ts.ReadLine
Loop
ts.Close: Set ts = Nothing

Set ts = fs.CreateTextFile(strFile & ".tmp")
For lngLine = 5 To lngTab - 3
If lngLine <> 6 Then ts.WriteLine tabFile(lngLine)
Next
ts.Close: Set ts = Nothing
Set fs = Nothing

Kill strFile
Name strFile & ".tmp" As strFile

End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le message
news: OyFLOa#
Tu as toutes les fonctions sur la page:
http://officesystem.access.free.fr/scr_scripting_runtime.htm
détail dans les pages :
http://officesystem.access.free.fr/scr_textfile.htm

tu prends un fileopen input , un fileopen output, un fileskipline 4 fois,
un

readall, un filewrite dans le nouveau fichier et un close des deux
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jessy Sempere [MVP]" a écrit dans le message
de

news: 41e3da10$
Ben écoutes ça ne doit pas être sorcier...
Je veux juste supprimer les 4 premières lignes de mon fichier ????

--
@+
Jessy Sempere - Access MVP






Avatar
Eric
Bonjour Jessy,

Et un petit truc comme ca pourrait-il faire l'affaire ?

Sub Modif()
Dim number1 As Integer, strBuffer As String, strTexte As String
Dim tblLine, i as Integer
number1 = FreeFile
Open "c:Test.txt" For Binary As number1
strBuffer = String$(LOF(number1), vbNullChar)
Get #number1, , strBuffer
Close #number1
number1 = FreeFile
Open "c:Test2.txt" For Output As number1
tblLine = Split(strBuffer, vbCrLf)
For i = 3 To UBound(tblLine)
strTexte = strTexte & tblLine(i) & vbCrLf
Next i
Print #number1, strTexte
Close number1
strBuffer="" : strTexte="" : Erase tblLine
Kill "c:Test.txt"
Name "c:Test2.txt" As "c:Test.txt"
End Sub

--
A+
Eric

"Jessy Sempere [MVP]" écrivait
news:41e3da10$:

Ben écoutes ça ne doit pas être sorcier...
Je veux juste supprimer les 4 premières lignes de mon fichier ????

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le
message news: e8qfGL#
je n'ai pas d'exemple mais on peut s'y atteler s'il le faut.
je suis aux ordres, je bouge pas, mais tu sais que je travaille
lentement, faut le temp l'après-midi.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jessy Sempere [MVP]" a écrit dans le
message
de

news: 41e3d527$
Salut Raymond

En fait je veux toujours supprimer les 4 premières lignes du
fichier texte

T'as un exemple de ce que tu décrivais ?

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------











Avatar
Pierre CFI [mvp]
Un bonne gomme devrait suffire je pense :o) ou alors, tu imprime, coupe aux ciseaux, puis scanner
je suis bon quand méme :o)

--
Pierre CFI
MVP Microsoft Access



Avatar
Eric
"Pierre CFI [mvp]" écrivait

Un bonne gomme devrait suffire je pense :o) ou alors, tu imprime,
coupe aux ciseaux, puis scanner je suis bon quand méme :o)

Ca montre une fois de plus que je suis pas un VRAI manuel ;-)


Puis la gomme et les ciseaux,
ce sont des objets qui existent encore ?
--
A+
Eric

Avatar
Raymond [mvp]
RE.

j'ai pris un peu de temps pour corriger les longueurs. Quand on est comme
Pierre et moi, on s'économise et on va au plus court mais en plus de temps.
Function ImportData()
Dim Str As String
Dim strFile As String
Dim fs As FileSystemObject
Dim ts As TextStream
strFile = CurrentProject.Path & "ParcAuto.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(strFile, ForReading)
ts.SkipLine
ts.SkipLine
ts.SkipLine
ts.SkipLine
Str = ts.ReadAll
ts.Close: Set ts = Nothing
Set ts = fs.CreateTextFile(strFile & ".tmp")
ts.Write Str
ts.Close: Set ts = Nothing
Set fs = Nothing
Kill strFile
Name strFile & ".tmp" As strFile
End Function

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jessy Sempere [MVP]" a écrit dans le message de
news: 41e3e9e8$
En résumé voici mon code :
**************************************************
Function ImportData()

Dim strFile As String
Dim tabFile() As Variant
Dim lngTab As Long, lngLine As Long
Dim fs As FileSystemObject
Dim ts As TextStream

strFile = CurrentProject.Path & "ParcAuto.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(strFile, ForReading)

Do While Not ts.AtEndOfStream
lngTab = lngTab + 1
ReDim Preserve tabFile(lngTab)
tabFile(lngTab) = ts.ReadLine
Loop
ts.Close: Set ts = Nothing

Set ts = fs.CreateTextFile(strFile & ".tmp")
For lngLine = 5 To lngTab - 3
If lngLine <> 6 Then ts.WriteLine tabFile(lngLine)
Next
ts.Close: Set ts = Nothing
Set fs = Nothing

Kill strFile
Name strFile & ".tmp" As strFile

End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le message
news: OyFLOa#
Tu as toutes les fonctions sur la page:
http://officesystem.access.free.fr/scr_scripting_runtime.htm
détail dans les pages :
http://officesystem.access.free.fr/scr_textfile.htm

tu prends un fileopen input , un fileopen output, un fileskipline 4 fois,
un

readall, un filewrite dans le nouveau fichier et un close des deux
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jessy Sempere [MVP]" a écrit dans le message
de

news: 41e3da10$
Ben écoutes ça ne doit pas être sorcier...
Je veux juste supprimer les 4 premières lignes de mon fichier ????

--
@+
Jessy Sempere - Access MVP










Avatar
Jessy Sempere [MVP]
Oui effectivement mais en fait mon code avait une petite
particularité...

Je ziguouille également la ligne 6 et les 3 dernières lignes.

Mais bon effectivement si comme je le disais j'avais vraiment
voulu supprimer uniquement les 4 premières lignes, ton code
était parfait. Merci

PS : T'as vu mon post intitulé : "DeleteLinesFile"
J'ai mis un bout de code permettant de supprimer des lignes (plusieurs)
dans un fichier texte avec l'objet FileSystemObject

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le message
news: #n9tzt$
RE.

j'ai pris un peu de temps pour corriger les longueurs. Quand on est comme
Pierre et moi, on s'économise et on va au plus court mais en plus de
temps.

Function ImportData()
Dim Str As String
Dim strFile As String
Dim fs As FileSystemObject
Dim ts As TextStream
strFile = CurrentProject.Path & "ParcAuto.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(strFile, ForReading)
ts.SkipLine
ts.SkipLine
ts.SkipLine
ts.SkipLine
Str = ts.ReadAll
ts.Close: Set ts = Nothing
Set ts = fs.CreateTextFile(strFile & ".tmp")
ts.Write Str
ts.Close: Set ts = Nothing
Set fs = Nothing
Kill strFile
Name strFile & ".tmp" As strFile
End Function

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jessy Sempere [MVP]" a écrit dans le message
de

news: 41e3e9e8$
En résumé voici mon code :
**************************************************
Function ImportData()

Dim strFile As String
Dim tabFile() As Variant
Dim lngTab As Long, lngLine As Long
Dim fs As FileSystemObject
Dim ts As TextStream

strFile = CurrentProject.Path & "ParcAuto.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(strFile, ForReading)

Do While Not ts.AtEndOfStream
lngTab = lngTab + 1
ReDim Preserve tabFile(lngTab)
tabFile(lngTab) = ts.ReadLine
Loop
ts.Close: Set ts = Nothing

Set ts = fs.CreateTextFile(strFile & ".tmp")
For lngLine = 5 To lngTab - 3
If lngLine <> 6 Then ts.WriteLine tabFile(lngLine)
Next
ts.Close: Set ts = Nothing
Set fs = Nothing

Kill strFile
Name strFile & ".tmp" As strFile

End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Raymond [mvp]" a écrit dans le
message


news: OyFLOa#
Tu as toutes les fonctions sur la page:
http://officesystem.access.free.fr/scr_scripting_runtime.htm
détail dans les pages :
http://officesystem.access.free.fr/scr_textfile.htm

tu prends un fileopen input , un fileopen output, un fileskipline 4
fois,



un
readall, un filewrite dans le nouveau fichier et un close des deux
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jessy Sempere [MVP]" a écrit dans le
message



de
news: 41e3da10$
Ben écoutes ça ne doit pas être sorcier...
Je veux juste supprimer les 4 premières lignes de mon fichier ????

--
@+
Jessy Sempere - Access MVP














1 2