OVH Cloud OVH Cloud

Modif d'un fichier texte

5 réponses
Avatar
Daniel AUBRY
Bonsoir à tous,

j'ai besoin d'ajouter, tous les jours, une dizaine de lignes AU DEBUT d'un
fichier texte existant.
Pour cela je crée un fichier temporaire dans le quel je colle mes 10 lignes,
puis j'ouvre le fichier original et recopie toutes ses lignes dans mon
fichier temporaire.
Je sauvegarde le tout, détruit le fichier original et renomme le fichier
temporaire en fichier original.
Ca marche mais je ne trouve pas cela très propre. J'ai cherché à faire avec
FSO mais je n'ai pas trouvé d'exemple sur le Net.
Si quelqu'un a une p'tite idée ..........................

Daniel

mail@daniel-aubry.com
www.daniel-aubry.com

5 réponses

Avatar
ng
Salut,
Surtout, ne pas utiliser FSO ! (voir sur http://faq.vb.free.fr)
Voici un code permettant de faire ce que tu veux :

Public Sub Ajout(sTxt as String)
Dim k as Integer,sBuff as String

'on récupère le contenu
k = FreeFile
Open "c:fichier.txt" for binary as #k
sBuff=Space$(Lof(k))
Get #k,,sBuff
Close #k

'ajoute la ligne et le texte original
k=FreeFile 'facultatif
Open "c:fichier.txt" for Output as #k
Print #k,sTxt
Print #k,sBuff; 'sans crlf à la fin
Close #k

sBuff=""

End Sub


--
Nicolas.
http://www.ngsoft-fr.com
"Daniel AUBRY" a écrit dans le message de news:
4006f2e6$0$22298$
Bonsoir à tous,

j'ai besoin d'ajouter, tous les jours, une dizaine de lignes AU DEBUT d'un
fichier texte existant.
Pour cela je crée un fichier temporaire dans le quel je colle mes 10


lignes,
puis j'ouvre le fichier original et recopie toutes ses lignes dans mon
fichier temporaire.
Je sauvegarde le tout, détruit le fichier original et renomme le fichier
temporaire en fichier original.
Ca marche mais je ne trouve pas cela très propre. J'ai cherché à faire


avec
FSO mais je n'ai pas trouvé d'exemple sur le Net.
Si quelqu'un a une p'tite idée ..........................

Daniel


www.daniel-aubry.com




Avatar
Zoury
Salut Daniel! :O)

C'est, à ma connaissance, la seule façon... tu peux nous montrer ton code
pour voir s'il n'y aurait pas une façon plus rapide..


Voici un exemple utilisant ma classe CFile..
'***
Option Explicit

Private Sub Main()

' file.txt contient 5 lignes soit :
'1
'2
'3
'4
'5
Const FILEPATH As String = "c:file.txt"
Dim f As CFile
Set f = New CFile

' on ajoute les lignes au début
Call f.AppendLine("Voici quelques")
Call f.AppendLine("lignes ajoutées")
Call f.AppendLine("au tout début du fichier..")
Call f.AppendLine("Les lignes qui suivent celle-ci appartiennent à
l'autre fichier :")
Call f.AppendLine("") ' on ajoute un saut de ligne avant la
concaténation

' on concatène le fichier désiré
Call f.AppendFile(FILEPATH)

' on sauvegarde avec le nom voulu
' ça écrase l'autre automatiquement..
Call f.SaveFileAs(FILEPATH)

' ouvre le fichier pour voir la modification
' le fichier devrait maintenant contenir ceci :
'Voici quelques
'lignes ajoutées
'au tout début du fichier..
'Les lignes qui suivent celle-ci appartiennent à l'autre fichier :
'1
'2
'3
'4
'5
Call Shell("notepad """ & FILEPATH & """")

End Sub
'***

cette classe est disponible ici :
http://groups.google.com/groups?selm=uKyYolctDHA.2464%40TK2MSFTNGP12.phx.gbl



..et oublie le FSO

Quels sont les désavantages du FSO (File System Object) ?
http://faq.vb.free.fr/index.php?question6

en plus d'être **désactivable par la sécurité système** ce qui peut rendre
ton code complétement inopérant..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
surfeur75
Ouais... transfert en variable, c'est une question que je pose justement ce
matin, normalement la variable est en ram, et si le fichier fait 4 mo tu
déborde la ram, non ?
Il me semble qu'il n'y a qu'une méthode pour les grandes capacités, c'est
celle du fichier intermédiaire, par de la suppression de l'original dont
l'intermédiaire prend sa place, c'est lourd, dangereux en
multi-utilisateurs, mais en l'absence de fonction "modif", je ne vois rien
d'autre...
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!


"ng" a écrit dans le message de news:

Salut,
Surtout, ne pas utiliser FSO ! (voir sur http://faq.vb.free.fr)
Voici un code permettant de faire ce que tu veux :

Public Sub Ajout(sTxt as String)
Dim k as Integer,sBuff as String

'on récupère le contenu
k = FreeFile
Open "c:fichier.txt" for binary as #k
sBuff=Space$(Lof(k))
Get #k,,sBuff
Close #k

'ajoute la ligne et le texte original
k=FreeFile 'facultatif
Open "c:fichier.txt" for Output as #k
Print #k,sTxt
Print #k,sBuff; 'sans crlf à la fin
Close #k

sBuff=""

End Sub


--
Nicolas.
http://www.ngsoft-fr.com
"Daniel AUBRY" a écrit dans le message de news:
4006f2e6$0$22298$
> Bonsoir à tous,
>
> j'ai besoin d'ajouter, tous les jours, une dizaine de lignes AU DEBUT


d'un
> fichier texte existant.
> Pour cela je crée un fichier temporaire dans le quel je colle mes 10
lignes,
> puis j'ouvre le fichier original et recopie toutes ses lignes dans mon
> fichier temporaire.
> Je sauvegarde le tout, détruit le fichier original et renomme le fichier
> temporaire en fichier original.
> Ca marche mais je ne trouve pas cela très propre. J'ai cherché à faire
avec
> FSO mais je n'ai pas trouvé d'exemple sur le Net.
> Si quelqu'un a une p'tite idée ..........................
>
> Daniel
>
>
> www.daniel-aubry.com
>
>




Avatar
surfeur75
Salut, et 1 fic de grande capacité 4mo, qui ne tient ni en list ni en ram,
pour le "trier", tu fais comment, sauf avec plusieurs fichiers?
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Daniel! :O)

C'est, à ma connaissance, la seule façon... tu peux nous montrer ton code
pour voir s'il n'y aurait pas une façon plus rapide..


Voici un exemple utilisant ma classe CFile..
'***
Option Explicit

Private Sub Main()

' file.txt contient 5 lignes soit :
'1
'2
'3
'4
'5
Const FILEPATH As String = "c:file.txt"
Dim f As CFile
Set f = New CFile

' on ajoute les lignes au début
Call f.AppendLine("Voici quelques")
Call f.AppendLine("lignes ajoutées")
Call f.AppendLine("au tout début du fichier..")
Call f.AppendLine("Les lignes qui suivent celle-ci appartiennent à
l'autre fichier :")
Call f.AppendLine("") ' on ajoute un saut de ligne avant la
concaténation

' on concatène le fichier désiré
Call f.AppendFile(FILEPATH)

' on sauvegarde avec le nom voulu
' ça écrase l'autre automatiquement..
Call f.SaveFileAs(FILEPATH)

' ouvre le fichier pour voir la modification
' le fichier devrait maintenant contenir ceci :
'Voici quelques
'lignes ajoutées
'au tout début du fichier..
'Les lignes qui suivent celle-ci appartiennent à l'autre fichier :
'1
'2
'3
'4
'5
Call Shell("notepad """ & FILEPATH & """")

End Sub
'***

cette classe est disponible ici :



http://groups.google.com/groups?selm=uKyYolctDHA.2464%40TK2MSFTNGP12.phx.gbl



..et oublie le FSO

Quels sont les désavantages du FSO (File System Object) ?
http://faq.vb.free.fr/index.php?question6

en plus d'être **désactivable par la sécurité système** ce qui peut rendre
ton code complétement inopérant..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
ng
Regarde mon post "Re : modif fic par variable : limites ???", pourquoi
travailler avec d'aussi gros fichiers textes ?

--
Nicolas.
http://www.ngsoft-fr.com
"surfeur75" a écrit dans le message de news:
OQCYOk$
Salut, et 1 fic de grande capacité 4mo, qui ne tient ni en list ni en ram,
pour le "trier", tu fais comment, sauf avec plusieurs fichiers?
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> Salut Daniel! :O)
>
> C'est, à ma connaissance, la seule façon... tu peux nous montrer ton


code
> pour voir s'il n'y aurait pas une façon plus rapide..
>
>
> Voici un exemple utilisant ma classe CFile..
> '***
> Option Explicit
>
> Private Sub Main()
>
> ' file.txt contient 5 lignes soit :
> '1
> '2
> '3
> '4
> '5
> Const FILEPATH As String = "c:file.txt"
> Dim f As CFile
> Set f = New CFile
>
> ' on ajoute les lignes au début
> Call f.AppendLine("Voici quelques")
> Call f.AppendLine("lignes ajoutées")
> Call f.AppendLine("au tout début du fichier..")
> Call f.AppendLine("Les lignes qui suivent celle-ci appartiennent à
> l'autre fichier :")
> Call f.AppendLine("") ' on ajoute un saut de ligne avant la
> concaténation
>
> ' on concatène le fichier désiré
> Call f.AppendFile(FILEPATH)
>
> ' on sauvegarde avec le nom voulu
> ' ça écrase l'autre automatiquement..
> Call f.SaveFileAs(FILEPATH)
>
> ' ouvre le fichier pour voir la modification
> ' le fichier devrait maintenant contenir ceci :
> 'Voici quelques
> 'lignes ajoutées
> 'au tout début du fichier..
> 'Les lignes qui suivent celle-ci appartiennent à l'autre fichier :
> '1
> '2
> '3
> '4
> '5
> Call Shell("notepad """ & FILEPATH & """")
>
> End Sub
> '***
>
> cette classe est disponible ici :
>



http://groups.google.com/groups?selm=uKyYolctDHA.2464%40TK2MSFTNGP12.phx.gbl
>
>
>
> ..et oublie le FSO
>
> Quels sont les désavantages du FSO (File System Object) ?
> http://faq.vb.free.fr/index.php?question6
>
> en plus d'être **désactivable par la sécurité système** ce qui peut


rendre
> ton code complétement inopérant..
>
> --
> Cordialement
> Yanick Lefebvre - MVP pour Visual Basic
> http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
>
> Merci de poster les réponses au groupe afin d'en faire profiter à tous
>
>