[ Batch ] Retrier un fichier txt [Résolu/Fermé]

Signaler
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
-
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
-
Bonjour,
J'ai déjà chercher un moyen pour classer les ligne d'un fichier texte.
Je m'explique.
Enfaite j'ai un fichier:

1.Patate
3.Poirot
4.Asperge 
5.Jambon

Mais comme vous voyer sa passe de la ligne 1. a 3.
Donc je voudrait que :
la ligne avec 3. passe a 2.
la ligne avec 4. passe a 3.
la ligne avec 5. passe a 4.

En faite que sa reclasse tout.
J'ai déjà chercher pendant 2h une solution en passant par plusieurs boucles en même temps.
Mais impossible.
Si quelqu'un a une idée je suis preneur.
Merci.
Bilou

9 réponses

Messages postés
18225
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 septembre 2020
5 014
hello
avec gawk version Windows de cet outil Unix : http://unxutils.sourceforge.net/

C:\>type f1.txt
1.Patate
3.Poirot
4.Asperge
5.Jambon
C:\>gawk -F"." " {print NR \".\" $2}" < f1.txt
1.Patate
2.Poirot
3.Asperge
4.Jambon
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
160
Ouai mais je l'aurais voulue en batch si c'est possible.
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
160
Bon au bout de 3h de recherche j'ai fini par trouver tout seul.
Voila le script:

@echo off
set nbr=0
setlocal enableDelayedExpansion
FOR /F "delims=1.,2.,3.,4.,5.,6.,7.,8.,9.,10." %%i in ('type text.txt') do (
set /a nbr=!nbr! + 1
echo !nbr!.%%i >> text.txt
)
setlocal disableDelayedExpansion

pause


Pour le "delims=1.,2.,3.,4.,5.,6.,7.,8.,9.,10." je sais c'est pas très propre mais vus que moi mon fichier s'arrête juste a 10.
Si pour vous non, je vous laisse trouver une solution tout seul ^^
Google est votre amis
Si sa peut aider quelqu'un.
Messages postés
18225
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 septembre 2020
5 014
tu peux généraliser la boucle for comme ça:
for /F "tokens=2 delims=." %%i in (text.txt) 
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
160
Merci mais peut tu m'expliquer le rôle de :
- tokens=
- delims=
Merci.
Messages postés
18225
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 septembre 2020
5 014
delims=. c'est le point qui est le séparateur de champ
token=2 on affiche que le deuxième champ, le premier étant le chiffre

tu trouves les détails dans l'aide Windws
delims=xxx Spécifie un jeu de séparateur. Celui-ci remplace le jeu de délimiteur par défaut constitué de l'espace et de la tabulation.
tokens=x,y,m-n Spécifie les jetons de chaque ligne qui doivent être passés au corps de la commande for pour chaque occurrence. Par conséquent, les noms de variables supplémentaires sont alloués. La forme m-n est une plage qui spécifie le mième au nième jetons. Si le dernier caractère de la chaîne tokens= est un astérisque (*), une variable supplémentaire est allouée pour recevoir le texte restant de la ligne après le dernier jeton analysé.
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
160
OK merci j'avais déjà lu l'aide de windows mais sa ne m'avais pas aider.
Alors que avec tes explication j'ai tout compris.
Merci beaucoup car avant je faisais un peu au piff.
xD
Merci.
Messages postés
18225
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 septembre 2020
5 014
ton truc avec setlocal enableDelayedExpansion et les ! dans set /a nbr=!nbr! + 1 est bon parce qu'on ne trouve rien dans l'aide Windows
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
160
Ouai j'ai beaucoup galère a le trouver ^^.