Se connecter / S'enregistrer
Votre question

[Résolu] Extraire une chaine entre deux mots (.bat)

Tags :
  • Creation
  • Programmation
Dernière réponse : dans Programmation
18 Mai 2011 11:11:06

Bonjour,

J'ai un soucis dans la création d'un .bat et je m'en sort vraiment pas malgré beaucoup de recherches...

J'ai un fichier texte sous la forme suivante :

Citation :
TEXTE INUTILE

T Col1 Col2 Col3

-- -------------------- ------------------------------ -----------------------

XX TEXTE A RECUP YYYY Texte

XX TEXTE A RECUP YYYY Texte



J'aimerais récupérer le contenu de la colonne 2 mais vu qu'il n'y a pas de délimiteurs (hormis un nombres quelconques d'espaces...) je n'y arrive pas...

Je sais que le XX et le YYYY sont des chaine fixe donc je pensais récupérer la ligne entière en sautant la première colonne avec le tokens (sa j'y arrive) et extraire la chaine qui précède YYYY.

Voila ce que j'ai pour l'instant :

  1. for /f "tokens=2* skip=4 delims=" %%a in (fichier.txt) do (
  2. echo %%a %%b
  3. )


Merci d'avance à ceux qui se pencheront sur le problème :D 

Autres pages sur : resolu extraire chaine mots bat

a b L Programmation
18 Mai 2011 21:18:28

Si tu sais que dans le texte, il n'y aura pas plus de 5 espaces par exemple, tu peux découper avec les espaces, et tester si chaque bout est YYYY.

Autre solution (plus simple), c'est d'utiliser un autre fichier batch qui prend en paramètre ta ligne. Ensuite, dans ce nouveau batch, tu testes les paramètres jusqu'à tomber sur YYYY. Pour faire ceci, il faut faire une boucle (sur %1 non vide) sur les paramètres avec %1 et SHIFT pour décaler les paramètres.
Et si tu ne veux faire qu'un seul batch (c'est plus complexe), tu peux utiliser une fonction récursive qui supprime chaque bout dans un fichier temporaire et former le texte en s'arrêtant sur YYYY.

Enfin dernière solution (celle que je préconise), tu installes python et abandonnes le batch. Tu fais un script qui ne doit pas faire plus de 5 lignes:
  1. a='dsgd XXX texte a recup YYY dgqfgsd'
  2.  
  3. a[ a.find('XXX')+3 : a.find('YYY')]

;) 
m
0
l
19 Mai 2011 15:52:18

Ok merci, je vais opter pour la solution python ;) 
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS