IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Sortir un mot aléatoire a partir d'un fichier txt [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 140
    Points : 61
    Points
    61
    Par défaut Sortir un mot aléatoire a partir d'un fichier txt
    Bonjour, Comment faire un petit batch qui sort aléatoirement une ligne d'un fichier texte (un mot par ligne dans le txt)?
    Merci a+

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @echo off
    setlocal enableextensions
    
    if "%1"=="" goto help
    
    REM Compter le nombre de lignes avant tout.
    set nblines=0
    for /F "delims=" %%I in ('type %1') do set /a nblines+=1
    REM Récupérer une ligne au hasard (random modulo nombre de lignes du fichier).
    set /a line=%RANDOM% %% %nblines%
    REM Parcours du fichier d'origine, en sautant "line" lignes.
    for /F "skip=%line% delims=" %%I in ('type %1') do (
    	REM Sortie de la ligne.
    	echo %%I
    	REM Arrêt de la boucle, pour ne pas sortir les lignes suivantes.
    	goto :break
    )
    :break
    goto :eof
    
    :help
    echo Syntax : %0 ^<File^>
    echo Will extract a random line from the file.
    goto :eof
    Le batch est directement utilisable, et envoie une ligne aléatoire du fichier passé en paramètre sur la sortie standard.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 140
    Points : 61
    Points
    61
    Par défaut
    Merci mais peux tu me dire stp ou est ce qu'on indique le nom du fichier txt?
    Merci a+

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Sur la ligne de commande, c'est le paramètre "%1" dans le batch...

    Tu devrais lire un cours sur le batch, j'ai l'impression qu'il te manque quelques bases qui te seraient utiles et, surtout, qui te permettraient d'avancer plus facilement.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 140
    Points : 61
    Points
    61
    Par défaut
    Merci Mak Lak, mais ton code est un peu trop compliqué pour moi

    Je vais me contenter de celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    set numeroDeLigne=%RANDOM%%%7
    set fichier=line.txt
    :-
    find /n /v "" %fichier%|find "[%numeroDeLigne%]">^^&set/pMOT=<^^&del ^^
    set MOT=%MOT:*]=%
    echo %MOT%
    pause

  6. #6
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Entre nous le code de Mac est beaucoup plus simple que celui que tu proposes.
    Et je doute que tu comprennes ce dernier si tu ne comprends pas celui de Mac.

    Surtout que ton code nécessite de connaître le nombre de lignes du fichier à l'avance. Combine au moins les deux codes pour palier à cela.
    Aussi ton code ne fonctionne pas en l'état, il manque un /a au premier set.

    Et ajoute un setlocal après le echo off pour que ta variable MOT ne persiste pas à la fin de ton script.
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 140
    Points : 61
    Points
    61
    Par défaut
    Salut,
    1-Le code de MacLak est plus simple, mais je ne comporend rien aux %1 %%I.

    2-Si, si j'ai compris le code que j'ai cité grace a quelques explications:
    find /n /v ""
    on cherche toutes les lignes y compris les vides et on mets devant chaque ligne trouvé un identifiant [x] , "x" étant un nombre allant de 1 à N


    find "[%numeroDeLigne%]" on match le numéro choisi par la variable %numeroDeLigne%

    la sortie sera:
    Code :

    [4]texte

    cette valeur sera rediriger vers un fichier de sortie qu'on va lire et on va sauvegardé son contenu dans la variable MOT

    set MOT=%MOT:*]=% on supprime tous les caractères avant le signe ] y compris celui-ci

    la sortie sera alors:

    Code :

    texte
    __________________
    3-Oui merci, il manque un /a

    4-Setlocal Ok merci je vais l'ajouter

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par pierreh51 Voir le message
    1-Le code de MacLak est plus simple, mais je ne comporend rien aux %1 %%I.
    C'est pourtant la base des passages de paramètres (%0 ... %9) et des traitements par boucles (%%I). C'est pour ça que je t'avais conseillé de lire un cours d'initiation au batch, de façon à te familiariser avec ces types de variables automatiques...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 140
    Points : 61
    Points
    61
    Par défaut
    ça y est merci beaucoup j'ai réussi a le faire fonctionner !
    (j'étais allé dans le tuto mais je ne trouvais pas %%I et %1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @echo off
    setlocal enableextensions
    
    if "ENTREE.TXT"=="" goto help
    
    REM Compter le nombre de lignes avant tout.
    set nblines=0
    for /F "delims=" %%I in ('type ENTREE.TXT') do set /a nblines+=1
    REM Récupérer une ligne au hasard (random modulo nombre de lignes du fichier).
    set /a line=%RANDOM% %% %nblines%
    REM Parcours du fichier d'origine, en sautant "line" lignes.
    for /F "skip=%line% delims=" %%I in ('type ENTREE.TXT') do (
    	REM Sortie de la ligne.
    	echo %%I
    	REM Arrêt de la boucle, pour ne pas sortir les lignes suivantes.
    	goto :break
    )
    :break
    goto :eof
    
    :help
    echo Syntax : SORTIE.TXT ^<File^>
    echo Will extract a random line from the file.
    goto :eof

    PS: je me suis permis de remplacer tes %1 par ENTREE.TXT, donc j'espère que ça ne te dérange pas

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par pierreh51 Voir le message
    (j'étais allé dans le tuto mais je ne trouvais pas %%I et %1)
    T'as pas beaucoup cherché :
    Tous ces liens sont tirés du cours que j'ai linké précédemment. Dans un cours, faut tout lire, et non pas survoler et/ou se contenter de chercher un mot-clé dedans...

    Citation Envoyé par pierreh51 Voir le message
    PS: je me suis permis de remplacer tes %1 par ENTREE.TXT, donc j'espère que ça ne te dérange pas
    Tu pouvais tout simplement prendre mon batch (disons nommé "getrandomline.bat") et taper ceci dans ton batch appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call getrandomline ENTREE.TXT
    Cela faisait très exactement la même chose, tu l'aurais su en créant ce batch et en tentant de l'exécuter, vu qu'il intègre une aide en ligne. Je te l'ai dit : ce batch est directement utilisable, et sort une ligne aléatoire du fichier passé en paramètre.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 140
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    T'as pas beaucoup cherché :
    Tous ces liens sont tirés du cours que j'ai linké précédemment. Dans un cours, faut tout lire, et non pas survoler et/ou se contenter de chercher un mot-clé dedans...
    Oui, je l'avais seulement survolé

    Tu pouvais tout simplement prendre mon batch (disons nommé "getrandomline.bat") et taper ceci dans ton batch appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call getrandomline ENTREE.TXT
    Cela faisait très exactement la même chose, tu l'aurais su en créant ce batch et en tentant de l'exécuter, vu qu'il intègre une aide en ligne. Je te l'ai dit : ce batch est directement utilisable, et sort une ligne aléatoire du fichier passé en paramètre.
    Ok merci pratique

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire des lettres aléatoirement à partir d'un fichier .txt
    Par selma89 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 15/09/2011, 13h51
  2. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  3. Réponses: 3
    Dernier message: 08/08/2006, 02h50
  4. Réponses: 4
    Dernier message: 19/03/2006, 15h20
  5. Réponses: 4
    Dernier message: 27/07/2005, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo