B8) Récupérer des mots d'un fichier texte

C'est un peu astucieux.

Imaginons que notre fichier texte soit par exemple TEXTE1.TXT 1 bonjour madame la fée 2 tiens voilà la pluie

Si notre texte était un batch

TEXTE1.BAT 1 bonjour madame la fée 2 tiens voilà la pluie

la ligne 1 chercherait une commande DOS interne BONJOUR, ou un programme BONJOUR.COM ou BONJOUR.EXE ou encore un batch BONJOUR.BAT

Alors si on a un petit batch comme ça:

BONJOUR.BAT 1 echo %1 > param1 2 type %2 3 set var=%3

on fait ce que l'on veut...

On peut penser que cela suppose que 1) on connaît le 1er mot 2) on ne récupère que la 1ère ligne 3) il n'y a ni commande interne ni COM ni EXE de ce nom l

En fait la première condition peut se contourner par insertion d'un fichier contenant un seul mot connu SANS CR/LF devant le fichier texte à traiter:

TEXTE2.TXT 1 ruse

TEXTE1.TXT 1 bonjour madame la fée CR/LF 2 tiens voilà la pluie CR/LF

RUSE.BAT 1 echo %5 %4 %3 %2 %1

MOTS1.BAT 1 copy texte2.txt texte2.bat 2 type texte1.txt >> texte2.bat 3 texte2

Après l'exécution des lignes 1 2 de MOTS1.BAT, TEXTE2.BAT contiendra

1 ruse bonjour madame la fée CR/LF 2 tiens voilà la pluie CR/LF

La ligne 3 lance TEXTE2 qui lance RUSE.BAT avec les paramètres %1 = bonjour ... ce qui donne à l'écran:

fée la madame bonjour

Avec la commande FIND on peut traiter assez facilement (?) des lignes autres que la 1ère, à condition de connaître le premier mot de la ligne en question et que ça soit la première fois que ce mot apparaît dans le texte:

FIND "chaîne" fichier > fichier2

auquel cas fichier2 ne contient que les lignes contenant "chaîne" Si "chaîne" est le premier mot de la première ligne de fichier2, c'est parfait.

Si ce n'est pas le cas, on peut peut-être encore ruser avec la numérotation des lignes avec le paramètre /n de FIND...

Le dernier problème (même nom qu'une commande interne ou qu'un COM ou un EXE) peut se traiter en donnant le chemin COMPLET, par exemple

C:BATVER.BAT

ou bien .VER.BAT