Page 1 sur 1
[R] Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 11:06
par sambalec
Salut, pouvez-vous m'éclairer, j'aimerais connaitre le code qui recherche et supprime toutes les chaines de caractères ne terminant pas par "/test" à chaque fin de ligne d'un fichier txt.
Merci d'avance

Re: [..]Supprimer une chaine de caractere dans fic
Posté : mar. 17 févr. 2009 11:26
par jbnh
Salut :
Code : Tout sélectionner
#include <string.au3>
;------------------------------------------------
$filename = 'test.txt'
;------------------------------------------------
$file = FileOpen($filename, 0)
$read = FileRead($file)
$line = StringSplit($read, @CR)
For $i = 1 To $line[0]
$var = FileReadLine($file, $i)
$newline = StringRight($var, 5)
If $newline <> "/test" Then
Filewrite("sortie.txt", $var & @CRLF)
Endif
Next
FileClose($filename)
Marche avec un txt de cette sorte :
a /test
b
a/test
bb
a /test
cdcd
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 11:46
par FernandG
Bonjour,
Tu peux regarder ici :
http://www.autoitscript.fr/forum/viewto ... f=3&t=2420, regarde la réponse de Tlem et tu auras début de réponse.
Le but est d'utiliser la fonction _ReplaceStringInFile pour remplacer tes "/test" par rien : "".
Code : Tout sélectionner
#include <file.au3>
Dim $find = "/test", $remplace = "", $i, $text
$filename = @DesktopDir & "\Test.txt"
_ReplaceStringInFile($filename, $find, $remplace)
Exit
A toi maintenant de compléter avec les vérifications de présence du fichier et d'ouverture. Regarde la doc car l'exemple est parfait.
Sinon dans le même registre mais un peu plus long, tu as la commande StringReplace associé à celle de FileReadLine. Toiut dépend de ton usage et besoin.
Bonne journée.
AutoITement.
P.S. : Désolé "jbnh", j'ai pas vu que tu avais déjà posté une réponse. De plus, j'ai pris le temps de répondre (taf oblige).
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 11:55
par sambalec
Merci à vous deux ! donc j'ai essayé le code de la première réponse ca a l'air fonctionnel mais pas pour des chaines de caractères un peu plus complexes comme celle-ci dans mon "test.txt" :
Code : Tout sélectionner
http://samba.lec.com/test/
http://samba2.lec.com/small.79326142.jpg?53238431
http://samba3.lec.com/small.83622546.jpg?57299131
http://samba4.lec.com/test/
http://samba5.lec.com/test/
http://samba6.lec.com/small.64194503.jpg?49003986
et donc en utilisant le code que tu m'a donné comme tel :
Code : Tout sélectionner
#include <string.au3>
#include <file.au3>
;------------------------------------------------
$filename = 'test.txt'
;------------------------------------------------
$file = FileOpen($filename, 0)
$read = FileRead($file)
$line = StringSplit($read, @CR)
For $i = 1 To $line[0]
$var = FileReadLine($file, $i)
$newline = StringRight($var, 5)
If $newline <> "/test/" Then
Filewrite("sortie.txt", $var & @CRLF)
Endif
Next
FileClose($filename)
Apres execution du script, mon fichier sortie.txt m'affiche les même lignes que test.txt

Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 12:01
par sambalec
Punaise, je viens de m'apercevoir que je me suis inversé dans les mots lors de ma première requête.
En fait j'aimerais ne garder que les lignes finissant par "/test/" et justement que toutes les autres soit supprimées.
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 12:20
par FernandG
Dans ce cas et en m'appuyant un peu sur le code de jbnh, je te prosose :
Code : Tout sélectionner
Dim $resultat
$fichier = @DesktopDir & "\Test.txt"
$file = FileOpen($fichier, 0)
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringRegExp($line, "/test/$") Then $resultat &= $line & @CRLF
Wend
Filewrite("sortie.txt", $resultat)
FileClose($fichier)
Exit
Bon appétit.
AutoITement.
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 12:25
par sambalec
Merci

, mais a priori le script ne fonctionne pas car il ne créé pas de sortie.txt

Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 13:40
par ani
il semble qu'il faut indiquer le filewrite dans la boucle while
Code : Tout sélectionner
If StringRegExp($line, "/test/$") Then $resultat &= $line & @CRLF
Wend
Filewrite("sortie.txt", $resultat)
deviend
Code : Tout sélectionner
If StringRegExp($line, "/test/$") Then $resultat &= $line & @CRLF
Filewrite("sortie.txt", $resultat)
Wend
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 13:56
par sambalec
Oui la le fichier se créé mais il reste toujours vide et le script ne s'arrete jamais ( c'est comme ca depuis le début). Probleme dans la boucle je pense...
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mar. 17 févr. 2009 15:02
par FernandG
Peux-tu essayer ceci STP :
Code : Tout sélectionner
Dim $resultat
$fichier = @DesktopDir & "\Test.txt"
$file = FileOpen($fichier, 0)
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringRegExp($line, "/test/$") Then $resultat &= $line & @CRLF
Wend
FileClose($fichier)
If FileExists(@DesktopDir & "\sortie.txt") Then FileDelete(@DesktopDir & "\sortie.txt")
Filewrite(@DesktopDir & "\sortie.txt", $resultat)
Exit
Je viens de vérifier à nouveau et je n'ai aucun souci, aussi bien avec le "fichier" exemple de
jbnh que le tient avec les :
http://samba5.lec.com/test/
Si tu intégres le FileWrite dans la boucle je te conseille plutot le code suivant :
Code : Tout sélectionner
If StringRegExp($line, "/test/$") Then Filewrite("sortie.txt", $line & @CRLF)
Wend
Qu'en penses-tu ani ?
Omis, mais pense aux diverses méthodes de vérifications de d'ouverture de fichier (pour le FileWrite).
Bon après midi.
AutoITement.
Re: [..]Supprimer une chaine de caractere dans fic
Posté : mar. 17 févr. 2009 16:53
par jbnh
Pourquoi ne pas tout simplement reprendre mon script et modifier :
"/test" par "/test/"
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mer. 18 févr. 2009 03:05
par ani
FernandG a écrit :Qu'en penses-tu ani ?
vos solutions sont ok

, j'aurais plutôt indiquer
fileclose($file) que
fileclose($fichier)
ps: j'ai répliqué sans regardé (ni testé)

Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : mer. 18 févr. 2009 08:43
par FernandG
Bonjour,
Exact pour le FileClose($file). Petite étourderie ...
Bonne journée.
AutoITement.
Re: [..]Supprimer une chaine de caractere dans fichier txt
Posté : dim. 22 févr. 2009 12:40
par sambalec
Merci pour toutes vos réponses

! Impec