Supprimer une ligne ne commençant pas par ..

Résolu
Mael730 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -  
Mael730 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute en script et j'aimerai épurer ce fichier:

Date Temps Durée_Pas NomBat

13/12/2008 21:04 113965 11:36:51 0501348EXI16


15/12/2008 11:44 253181 11:39:50 0501348EXI16

Appoint en eau le 151208 el1 : 350 ml el2 : 350 ml

16/12/2008 16:03 355113 25:00:13 0501348EXI16

17/12/2008 03:53 397698 10:49:42 0501348EXI16


en ceci:

13/12/2008 21:04 113965 11:36:51 0501348EXI16
15/12/2008 11:44 253181 11:39:50 0501348EXI16
16/12/2008 16:03 355113 25:00:13 0501348EXI16
17/12/2008 03:53 397698 10:49:42 0501348EXI16

Autrement dit, il faudrai supprimer les lignes ne commençants pas par une date.
Je suis sous windows: batch, perl??

Pouvez-vous m'orienter svp

Merci d'avance
A voir également:

10 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
déjà pas batch !
perl, c'est bien. Moi je l'aurait fait en bash+sed, mais ce n'est qu'une question de choix.
En perl, il faut utiliser les expressions conditionnelles.
conserve les ligne commençant ainsi (cf. expression rationnelle en perl) :
/^..\/..\/.... ..:../
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
avec findstr
C:>\ type f2.txt

Date Temps DurÚe_Pas NomBat

13/12/2008 21:04 113965 11:36:51 0501348EXI16

15/12/2008 11:44 253181 11:39:50 0501348EXI16

Appoint en eau le 151208 el1 : 350 ml el2 : 350 ml

16/12/2008 16:03 355113 25:00:13 0501348EXI16

17/12/2008 03:53 397698 10:49:42 0501348EXI16

en ceci:

13/12/2008 21:04 113965 11:36:51 0501348EXI16
15/12/2008 11:44 253181 11:39:50 0501348EXI16
16/12/2008 16:03 355113 25:00:13 0501348EXI16
17/12/2008 03:53 397698 10:49:42 0501348EXI16

C:>\ findstr "^../../" f2.txt
13/12/2008 21:04 113965 11:36:51 0501348EXI16
15/12/2008 11:44 253181 11:39:50 0501348EXI16
16/12/2008 16:03 355113 25:00:13 0501348EXI16
17/12/2008 03:53 397698 10:49:42 0501348EXI16
13/12/2008 21:04 113965 11:36:51 0501348EXI16
15/12/2008 11:44 253181 11:39:50 0501348EXI16
16/12/2008 16:03 355113 25:00:13 0501348EXI16
17/12/2008 03:53 397698 10:49:42 0501348EXI16
0
Mael730 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   1
 
Ok je me suis renseigné sur les expressions rationnelles et c'est bien ce qu'il me faut, mais je ne sais pas du tout par ou commencer?? Comment construire ma boucle etc.. (je débute vraiment!)
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
findstr "^../../"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mael730 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   1
 
Dsl dubcek j'avais pas vu ta réponse!
effectivement ca marche très bien le findstr, tu peux m'éclairer sur ce qui ne va pas la dessous:

@echo off

setlocal enableDelayedExpansion

for /f "delims=" %%a in ('dir /b/s *.txt') do
( set D=%%~pa findstr "^../../ ^./../ ^.././" "%%a" > "!D!\"la je ne sais pas quoi mettre" )

Le script parcourerai donc tout les repertoires a la recherche de fichiers txt puis rentrerai dans tous ces fichiers txt pour supprimer les lignes ne commençants pas par une date <=> à extraire les lignes contenant les dates puis réécrire sur le fichier source ces lignes.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je pense vraiment que ça serait plus simple en Perl, surtout que c'est bien plus large que DOS, ça t'ouvrirai d'autres horizons.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
pour rechercher selon plusieurs critères, il faut les mettre dans un fichier, option /g:. Si j'ai bien compris tu veux remplacer le fichier .txt par le résultat de la recherche ? il faut passer par un fichier temporaire.
!!! Faire des sauvegardes et des tests !!!
C:>\  type gg.txt
^[0-9][0-9]/[0-9][0-9]/
^[0-9]/[0-9][0-9]/
^[0-9][0-9]/[0-9]/

C:>\ type fichier.bat
@echo off

setlocal enableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s *.txt') do (
set n=%TMP%\temp01.txt
findstr /g:gg.txt "%%a" > !n!
copy /y !n! "%%a"
)
0
Mael730 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci ça marche!

J'ai aussi essayer sans passer par le fichier gg.txt :

@echo off

setlocal enableDelayedExpansion
for /f "delims=" %%a in ('dir /b/s *.txt') do (
set n=%TMP%\temp01.txt
findstr "^../../ ^./../ ^.././ ^././" "%%a" > !n!
copy /y !n! "%%a"
)
exit

Ca marche aussi! y a t-il un inconvénient (que je ne verrai pas à permière vue) à ne pas passer par ce fichier gg.txt?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
non,effectivement ca marche sans fichier
0
Mael730 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   1
 
Ok, affaire classée!

merci dubcek
0