[Résolu2x]Comment supprimer toute une ligne contenant mot spécifique ?

Comment supprimer toute une ligne contenant mot spécifique ? [Résolu2x] - Logiciels - Windows & Software

Marsh Posté le 24-11-2005 à 08:54:05    

Bonjour,
je suis au boulot et j'ai un travail asez récurent à faire. J'ai un fichier .txt et je dois le trier. A noter que certaines lignes, que je dois supprimer, apparaissent souvent. Je souhaiterais supprimer une ligne entière contenant un mot spéficique (quelque soit ce qu'il y a avant et apres sur la meme ligne)
 
J'ai regardé dans Word et StarOffice8 mais je n'ai rien trouvé, ni sur google d'ailleurs.
 
Quelqu'un aurait une idée de comment faire la manip ?
 
Merci !


Message édité par elojar le 24-11-2005 à 09:38:33
Reply

Marsh Posté le 24-11-2005 à 08:54:05   

Reply

Marsh Posté le 24-11-2005 à 09:20:30    

:hello:  
Voici un petit script qui fait cela :

Code :
  1. ' Supprime toutes les lignes qui contiennent un mot clef
  2. Const ForReading = 1, ForWriting = 2, ForAppending = 8
  3. Dim fso, f_in, f_out
  4. mot_clef = "titi"
  5. Set fso = CreateObject("Scripting.FileSystemObject" )
  6. Set f_in = fso.OpenTextFile("toto.txt", ForReading)
  7. Set f_out = fso.OpenTextFile("toto_tmp.txt", ForWriting, true)
  8. Do Until f_in.AtEndOfStream
  9.    une_ligne = f_in.ReadLine
  10.    token_pos = Instr(une_ligne, mot_clef)
  11.    If (token_pos = 0) Then
  12.       ' Recopie la ligne si elle ne contient pas le mot clef
  13.       f_out.WriteLine une_ligne
  14.    End If
  15. Loop
  16. f_in.Close
  17. f_out.Close
  18. ' Remplace toto.txt par le nouveau fichier toto_tmp_.txt
  19. fso.DeleteFile "toto.txt", true
  20. fso.MoveFile "toto_tmp.txt", "toto.txt"

- Copier ces lignes dans un fichier que l'on nommera par exemple delline.vbs.
- Changer le contenu du mot_clef et le nom du fichier.
- Lancer ce script en cliquant dessus à partir de Windows Explorer, ou bien, dans une fenêtre de commande en tappant cscript.exe delline.vbs.  :)

Reply

Marsh Posté le 24-11-2005 à 09:30:21    

En fait, il y a une manip plus simple :

Code :
  1. FIND /V titi toto.txt >new_toto.txt


ou bien sous Unix

Code :
  1. grep -v titi toto.txt >new_toto.txt

Reply

Marsh Posté le 24-11-2005 à 09:37:47    

Ouch ca fait mal !
J'ai fais le script ca marche tres bien. Pour la 2e manip j'ai pas essayé j'ai pas trop compris comment il fallait faire mais la 1ere me plait tres bien ^^
 
Merci chef !

Reply

Marsh Posté le 24-11-2005 à 09:50:52    

C'est encore moi ^^
Etant donné que tu as l'air assez bon en la matière en testant un peu je me rend compte que je pourrais améliorer le système pour encore plus d'automatisation.
 
Imagine que j'ai plusieurs .txt dans le meme dossier. Je voudrais que la modification précédente s'effectue pour tous les .txt en meme temps, c'est possible ?
Et deuxièment, imagine que je veuilles faire cette manip pour plusieurs chaines de caractères différentes. Est-ce possible de faire tout dans un seul script ou dois-je executer un script différent à chaque fois ?
 
Je suis difficile je sais mais bon si je peux gagner encore un peu de temps et moins m'abimer les yeux sur l'écran je suis pas contre ;)
 
En tout cas merci pour l'aide !

Reply

Marsh Posté le 25-11-2005 à 19:14:36    

T'es plus là mon ami olivthill ? ^^
Tu me dira c'est le week-end ca presse pas mais si j'avais la soluce pour lundi ce serait impec  :bounce:

Reply

Marsh Posté le 27-11-2005 à 22:56:48    

Excuses-moi, je m'étais caché parce que je préfère éviter de donner des programmes que je n'ai pas testés, et je n'avais tellement le temps de le faire.
 
Mais, maintenant, c'est bon, voici un nouveau script qui traite tous les fichiers ."txt" du répertoire courant. Pour chaque fichier, les lignes sont supprimées quand elles contiennent au moins l'un des trois mots clef "toto", "titi", "tutu". S'il y a d'autres mots à filtrer, il faut dupliquer la ligne 25.

Code :
  1. ' Boucle sur tous le fichiers ".txt" du répertoire courant
  2. ' et supprime toutes les lignes qui contiennent un mot clef
  3. Const ForReading = 1, ForWriting = 2, ForAppending = 8
  4. Dim fso, f, fc, f_in, f_out
  5. Set fso = CreateObject("Scripting.FileSystemObject" )
  6. Set f = fso.GetFolder("." )
  7. Set fc = f.Files
  8. For Each f1 in fc
  9.    If (fso.GetExtensionName(f1) = "txt" ) Then
  10.       old_fic_nom = f1.name
  11.       new_fic_nom = fso.GetBaseName(f1) & ".txt_tmp"
  12.       Set f_in = fso.OpenTextFile(old_fic_nom, ForReading)
  13.       Set f_out = fso.OpenTextFile(new_fic_nom, ForWriting, true)
  14.       Do Until f_in.AtEndOfStream
  15.          une_ligne = f_in.ReadLine
  16.          If (Instr(une_ligne, "toto" ) = 0 _
  17.              and InStr(une_ligne, "titi" ) = 0 _
  18.              and InStr(une_ligne, "tutu" ) = 0) Then
  19.             ' Recopie la ligne si elle ne contient pas les mots clefs
  20.            f_out.WriteLine une_ligne
  21.          End If
  22.       Loop
  23.       f_in.Close
  24.       f_out.Close
  25.      
  26.       ' Remplace l'ancien fichier par le nouveau
  27.       fso.DeleteFile old_fic_nom, true
  28.       fso.MoveFile new_fic_nom, old_fic_nom
  29.    End If
  30. Next


Message édité par olivthill le 27-11-2005 à 23:02:25
Reply

Marsh Posté le 28-11-2005 à 22:25:19    

Merci beaucoup olivthill tu peux pas savoir comment ca va me rendre service ;)  :jap:  :jap:  :jap:

Reply

Marsh Posté le 16-04-2008 à 00:55:47    

hello,
 
je sais que je remonte un vieux topic
 
mais je cherche l'inverse,
je souhaite garder uniquement les lignes qui gardent un mot clé
 
merci

Reply

Marsh Posté le 16-04-2008 à 06:33:06    

olivthill a écrit : a écrit :

 
ou bien sous Unix



 
µIl existe un GREP sous windows.
 
perso; je l'utilise tout les jours


---------------
#mais-chut
Reply

Marsh Posté le 16-04-2008 à 06:33:06   

Reply

Marsh Posté le 16-04-2008 à 06:34:52    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed