Modifier fichier texte

Signaler
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010
-
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011
-
Bonjour,
J'aimerais savoir comment faire pour faire une petite gymnastique avec un fichier txt je vous explique ; j'ai un fichier (config.txt) qui contient comme son nom l'indique des lignes de texte (une ligne par config) pour la configuration d'une application. J'aimerais savoir faire en sorte que mon application detecte dans le fichier config.txt la ligne suivante ("AutoExec, 1,0 - 2 false#") et si il detecte cette ligne l'application vb devra modifier cette ligne par en l'occurence ("AutoExec, 1,0 - 2 true#")

j'espère avoir été assez claire,
Merci d'avance

123

40 réponses

Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Bonjour,
Avec la méthode Line Input tu peux lire un fichier en mode séquentiel. Il suffit que tu remarques quelle ligne se réfère à "AutoExec, 1,0 - 2 false#" et de réécrire le fichier avec "AutoExec, 1,0 - 2 true#" pour cette même ligne.

Cordialement ;)
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

et pouvez vous me montrer un exemple concret ?

123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Je vais essayer de mettre la bonne syntaxe^^...
Ca serait quelque chose du genre:

Open Path & "\config.txt" For Input As #1
   While Not EOF(1)
      Line Input #1,,TS
      If TS="AutoExec, 1,0 - 2 false#" Then
         Final=Final & "AutoExec, 1,0 - 2 true#" & vbcrlf
      else
         Final=Final & TS & vbcrlf
      End If
   Wend
Close #1

Voilà, en fait, explications:
Open ... For Input As ... permet de lire le contenu d'un fichier.
La boucle permet de lire le fichier jusqu'à la fin (EOF correspond à EndOfFile, donc tant qu'on n'atteint pas la fin du fichier, on continue à le lire).
Line Input permet de stocker la ligne en cours de lecture dans une variable (ici TS).
On traite alors cette ligne pour savoir ce qu'elle contient.
Si elle contient ce que tu cherches, tu la remplaces par celle que tu veux, et sinon tu stockes la même valeur dans une autre variable qui sera utilisée en tant que contenu final (ici Final).
Une fois que tu as la variable finale (donc après la fin de la boucle), tu fais:

Open Path & "\config.txt" For Output As #1
   Write #1, Final
Close #1

Si le contenu du fichier est trop grand à la base pour pouvoir être contenu par la variable finale, il faut sauvegarder dans un fichier alternatif à chaque lecture de ligne, puis remplacer le fichier de base par le fichier alternatif une fois la boucle terminée.

Après peut-être existe-il une autre solution, peut-être même meilleure.

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Au passage, Path correspond bien sûr au répertoire contenant ton fichier config.txt.

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

merci sharkiller le problème c'est que après AutoExec, 1,0 - 2 false# il y à d'autre chose donc ton code permet de remplacer AutoExec, 1,0 - 2 false# par une autre chaine mais le reste est toujours visible il faut supprimer entièrement la ligne si tu sais faire merci bcp

123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Je croyais que tu voulais remplacer "true" par "false" dans la ligne?


Si tu veux supprimer cette ligne tu n'as qu'à faire:

If TS<>"AutoExec, 1,0 - 2 false#" Then
    Final=Final & TS & vbcrlf
End If

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

merci bien je vais tester et je te tient au courant merci d'avance bien sûr ;)

123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

OK, par contre, la syntaxe Line Input se fait comme ceci:
Line Input #1, variable
et non comme cela:
Line Input #1,,variable

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

mince alors le script ne fonctionne pas du tout chez moi je me suis peut etre mal exprimé je vais essayer de reformuler :
j'ai un fichier txt comme ci dessous:

ligne1 - texte a - nombre
ligne 2 - nombre - texteb
ligne 3 - chiffre - nombre
ligne 4 - nombre - textec
...

chaque ligne est différente
j'aimerais que l'orsque l'application detecte (par exemple) "ligne 3 - chiffre" qu'il supprime la ligne ou il à trouvé "ligne 3 - chiffre" c'est à dire la ligne 3 sur cet exemple le fichier à la final devrais donc ressembler à

ligne1 - texte a - nombre

ligne 2 - nombre - texteb

ligne 4 - nombre - textec

voilà j'espère avoir été claire

Merci d'avance

123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Oui, d'accord, ben c'est bien le code que je t'ai donné en dernier. Enfin j'imagine... T'as mis quoi dans ton code?

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

Open "c:\fichier.txt" For Input As #1
   While Not EOF(1)
      Line Input #1, ts
     If ts <> "loren est" Then
    Final = Final & ts & vbCrLf
End If
   Wend
Close #1
MsgBox Final + vbCrLf + ts

Open Path & "c:\config.txt" For Output As #1
   Write #1, Final
Close #1

mais pareil sa dégage pas la ligne car le but c'est que sa dégage la ligne ou ce trouve le texte mais tout entier et la remplace par une autre chaine de caractère et le blem c'est que je peut pas utliser la fonction replace !

123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Ah mais tu veux enlever qu'une partie de la ligne?

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

non en fait si le exe detecte  "loren est" (par rapport au test) dans le fichier txt alors il dois suprimmer le contenu entier de la ligne (ou se trouve "loren est") et mettre autres chose

je suis pas claire ?

 123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Ben ça l'est de moins en moins lol^^.
Au début j'ai cru que tu voulais effectivement remplacer le contenu de la ligne par autre chose, mais ensuite tu m'as dis que tu voulais supprimer la ligne entièrement^^.

Par exemple, tu veux que
bonjour
question
au revoir
donne
bonjour
au revoir
ou donne
bonjour
comment ça va?
au revoir
quand tu remplaces "question" par "comment ça va?"?

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

non exemple de mon fichier config.txt

azerty poiuy
qsdfgh poiur
wxcvb nbvcx
aqwxsz ecdrvf

si le exe detecte "wxcvb " alors il trouve la ligne ou se trouve cette chaine supprime entièrement la ligne ce qui donne

azerty poiuy

qsdfgh poiur
aqwxsz ecdrvf

pour écrire au même endroit une chaine de caractère en loccurence "test" ! ce qui donne

azerty poiuy

qsdfgh poiur
test
aqwxsz ecdrvf

je pense être claire là non ? ;)

123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Ah OK, je vois
Alors il te faut sélectionner la chaîne de la sorte:

dim OK as Boolean
dim a as Integer
for a=1 to len(ts)
If mid(ts,a,len("loren est")) <> "loren est" Then OK=True
next a
if OK=true then Final=Final & ts & vbcrlf

au lieu de faire

If ts <> "loren est" Then
    Final = Final & ts & vbCrLf
End If

Normalement, il ça devrait répondre à tes attentes .

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

ça devrait* pardon pour la faute d'inattention^^

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

je suis un débutant tu sais et voila ce que j'ai mis dans mon code
Private Sub Command1_Click()
Open "c:\fichier.txt" For Input As #1
   While Not EOF(1)
      Line Input #1, ts
Dim OK As Boolean
Dim a As Integer
For a = 1 To Len(ts)
If Mid(ts, a, Len("loren est")) <> "loren est" Then OK = True
Next aIf OK True Then Final Final & ts & vbCrLf
   Wend
Close #1
MsgBox Final + vbCrLf + ts

Open Path & "c:\config.txt" For Output As #1
   Write #1, Final
Close #1

End Sub

je dois me tromper car franchement sa fait rien :(
123
Messages postés
80
Date d'inscription
dimanche 12 octobre 2003
Statut
Membre
Dernière intervention
25 avril 2011

Il contient "loren est" ton fichier "fichier.txt"?


Au passage, tu n'as pas besoin de mettre "Path &" avant "c:\config.txt", ça ne sert à rien, tu indiques déjà le répertoire du fichier.


Ben essaie de comprendre tes erreurs aussi . Moi je veux bien t'aider, mais ça serait bien que ça te reste...

§H@®?¦££?®[mailto:$|-|@|2|<!LL?|2 ]
Messages postés
181
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2010

bon je vais voir ou sont mes erreurs non mon fichier contient pas "loren est" mais "wxcvb " comme dit plus haut

123