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. :x
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