[ Batch ] Retrier un fichier txt

Résolu
cs-bilou Messages postés 836 Statut Membre -  
cs-bilou Messages postés 836 Statut Membre -
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

--
Il y a des jours faut pas m'chercher.
Et y'a des jours tous les jours !
Configuration: Windows XP
Firefox 3.0.6

9 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    0
  2. cs-bilou Messages postés 836 Statut Membre 164
     
    Ouai mais je l'aurais voulue en batch si c'est possible.
    0
  3. cs-bilou Messages postés 836 Statut Membre 164
     
    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.
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    tu peux généraliser la boucle for comme ça:
    for /F "tokens=2 delims=." %%i in (text.txt) 
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cs-bilou Messages postés 836 Statut Membre 164
     
    Merci mais peut tu m'expliquer le rôle de :
    - tokens=
    - delims=
    Merci.
    0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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é.
    0
  8. cs-bilou Messages postés 836 Statut Membre 164
     
    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.
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    0
  10. cs-bilou Messages postés 836 Statut Membre 164
     
    Ouai j'ai beaucoup galère a le trouver ^^.
    0