Partage
  • Partager sur Facebook
  • Partager sur Twitter

Regex avec findstr

26 mars 2015 à 14:59:04

Bonjour,

j'éprouve des difficultés pour la recherche de regex avec findstr, j'aurais besoin de votre aide :) Mon but est de rechercher dans plusieurs fichiers disposés dans un même dossier une chaine de caractères semblables à celle-ci : |IP|03~02~2030~1~M ; ce qui est en gras en rouge est la chaine qui change d'un fichier à un autre.
Cela peut-être des valeurs comme  :
P~115~3401
37~37~5103
44~44~5103
126~126~5101
...

Mon début de code est celui ci :
for /F %%a in ('type "test\*.hpr" ^|findstr /R /C:"|IP|[0-400]*[PF]*~[0-400]~[3010-5106]~1~M" ') do (
set val1=%%a
set val2=%%b
)

Sauf que évidemment ça ne fonctionne pas ... Sans utiliser de pattern, mon code est ok par contre.

Merci d'avance de votre aide
  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2015 à 15:24:02

Bonjour,

Pourquoi ne pas simplement chercher par "|IP|" ?

Si comme tu le dis "IP" précède toutes les chaines que tu souhaites récupérés, autant ne chercher que "IP". :)

for /F %%a in ('type "test\*.hpr" ^|findstr /R /C:"|IP|" ') do (
set val1=%%a
set val2=%%b
)

Du courage !

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
26 mars 2015 à 16:19:26

Merci Tenebrum, c'est vrai que comme ça c'est plus simple, par contre je me rends compte que la chaine que je recherche n'est pas placé forcément au même endroit d'un fichier à un autre, ce qui fait que pour un fichier ceci va fonctionner :

for /F "tokens=12, 13 delims=~" %%a in ('type "test\*.hpr" ^|findstr /R /C:"|IP|" ') do (
set val1=%%a
set val2=%%b
)
(j'avais oublié dans mon code de mon post précédent ceci :
"tokens=12, 13 delims=~

 )

mais dans un autre fichier cela va me retourner une chaine fantaisiste car on ne va pas retrouver cette chaine à la 12è position. Idem si je change de délimiteur, je vais avoir le même souci.

Comment pourrais je faire ? Peut on se passer d'une boucle for pour l'extraction d'une chaine ?

  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2015 à 16:55:01

Bonjour,

En batch, c'est assez dur de se passer d'un For...

peux-tu donner un morceau de tes fichiers .hpr pour que je puisses voir ?

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
27 mars 2015 à 14:53:59

Ok voici un exemple avec en rouge ce que je veux récupérer :

FICHIER 1 :

||024332|7210020~||||||||||20150100^|IP|01~01~2030~1~M~66589~ENTRE

A|E~5|||U||||201506||

AP|1|18||207906|130067019|01|1|01|7|67|03|0|||80|||2070606|||~~~~~||L|1||1|5|

FICHIER 2 :

||315554||||A|||||201505600^|IP|03~02~2030~1~M~66590~ENTREE~5|||U||||201260758||

AP|1|10||20606|22406266|01|1|01|7|67|05|0|||80|||2070606|||~~~~~||L|1||1|5|

  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2015 à 15:40:30

Bonjour,

Le batch est vraiment obligatoire ?

Si tu le fais avec powershell c'est plus simple...

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
27 mars 2015 à 16:37:42

oui c'est clair qu'avec powershell ça doit être plus simple et beaucoup plus intuitif mais (et un "mais" de taille) je ne connais pas powershell :-/
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2015 à 16:59:23

Bonjour,

C'est plus simple et moins barbare que le batch, regarde si tu peux, c'est très puissant et assez facile d'utilisation.

ton batch est imposé ?

Sinon je peux t'aider en PowerShell, mais plus en batch...

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
27 mars 2015 à 19:19:00

Non on ne me l impose pas lol j ai quelques docs sur powershell, je vais lire ça. Merci de ta proposition Tenebrum, en fait avec powershell on fait les memes choses qu en batch ms en plus puissant ?
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2015 à 19:30:37

Bonjour,

Le powershell est 10 000 fois plus puissant que le batch ^^, donc oui

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
10 avril 2015 à 14:04:24

Salut Tenebrum,

J'suis en train de me mettre petit à petit sur powershell, vu que tu m'as proposé ton aide, je souhaitais dans un premier temps savoir si l'on pouvait obtenir de l'aide via get-help sur les méthode et/ou propriétés d'un objet ? Et si oui quelle syntaxe adopter ?

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2015 à 14:09:10

Get-help aime seulement sur les Cmd-let, pour obtenir les méthodes/propriétés tu peux utiliser Get-member :)

Ta-Commande |Get-member

le "|" c'est Alt Gr + 6

  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
10 avril 2015 à 16:31:24

oui get-member, c'est ce que je fais, ça m'obtient les propriétés et méthodes de ma cmlet mais comment avoir de l'aide sur une des méthode ou propriété retournée ?
  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2015 à 18:15:39

Tout est dans le champs "Description" :)
  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
28 avril 2015 à 8:28:42

Salut Tenebrum,

j'ai commencé à coder en PowerShell, c'est un langage plutôt agréable, bien plus que le batch en tout cas en effet.

Dans un fichier je souhaite supprimer une chaine de caractères qui débute une ligne ; je parviens à supprimer la chaine de caractères mais je ne parviens pas à supprimer le retour à la ligne.

Voici mon code :

Code:

(get-content C:\test2\test.txt)|foreach-object {$_ -replace "A\|""`b"}|set-content C:\test2\test.txt



Et voici le contenu de mon fichier avant modif :

ligne 1
A|blabla


Et après :

ligne 1
(dessins d'un petit carré ici)blabla


Mon but serait d'avoir :

ligne 1blabla


Qu'en penses tu ?

  • Partager sur Facebook
  • Partager sur Twitter
2 mai 2015 à 21:21:23

Bonjour,

Peux-tu envoyer un extrait de ton fichier à traiter ?

cordialement

  • Partager sur Facebook
  • Partager sur Twitter
L'esprit n'avance que s'il a la patience de tourner en rond, c'est-à-dire d'approfondir.
20 août 2017 à 18:34:55

bonjour , quelqun connait il une regex pour trouver des chaines identiques a la suite dans un texte ?

Merci d´avance.

  • Partager sur Facebook
  • Partager sur Twitter