[R] Supprimer une chaine de caractere dans fichier txt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
sambalec
Niveau 4
Niveau 4
Messages : 56
Enregistré le : lun. 05 janv. 2009 21:32
Status : Hors ligne

[R] Supprimer une chaine de caractere dans fichier txt

#1

Message 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 :)
Modifié en dernier par sambalec le dim. 22 févr. 2009 12:41, modifié 1 fois.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fic

#2

Message 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
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#3

Message 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).
sambalec
Niveau 4
Niveau 4
Messages : 56
Enregistré le : lun. 05 janv. 2009 21:32
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#4

Message 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 :(
sambalec
Niveau 4
Niveau 4
Messages : 56
Enregistré le : lun. 05 janv. 2009 21:32
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#5

Message 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.
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#6

Message 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.
sambalec
Niveau 4
Niveau 4
Messages : 56
Enregistré le : lun. 05 janv. 2009 21:32
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#7

Message par sambalec »

Merci :), mais a priori le script ne fonctionne pas car il ne créé pas de sortie.txt :?
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#8

Message 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
sambalec
Niveau 4
Niveau 4
Messages : 56
Enregistré le : lun. 05 janv. 2009 21:32
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#9

Message 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...
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#10

Message 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.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fic

#11

Message par jbnh »

Pourquoi ne pas tout simplement reprendre mon script et modifier :
"/test" par "/test/"
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#12

Message 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é) :(
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#13

Message par FernandG »

Bonjour,

Exact pour le FileClose($file). Petite étourderie ...

Bonne journée.
AutoITement.
sambalec
Niveau 4
Niveau 4
Messages : 56
Enregistré le : lun. 05 janv. 2009 21:32
Status : Hors ligne

Re: [..]Supprimer une chaine de caractere dans fichier txt

#14

Message par sambalec »

Merci pour toutes vos réponses :) ! Impec
Répondre