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 :

Incrementation compteur fonction du nombre de mots dans une chaine de caractères


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Incrementation compteur fonction du nombre de mots dans une chaine de caractères
    Bonjour,

    Avis à tous ceux qui vont répondre, je sais qu'il est plus aisé de faire ce script en perl ou python. Néanmoins, il s'agit d'un but personnel.
    Je sais également qu'il y a les tâches planifiées sous windows.
    Imaginez vous sur une île déserte avec votre couteau... et un yéti à défoncer!
    Voilà, vous êtes dans le contexte.

    Objectif :
    Compter le nombre de mot dans une chaine de caractères stockée dans une variable.

    Réalisation :
    J'ai effectué plusieurs tentative, diverses et variées. Toutes à base d'une boucle for.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    Setlocal enbledelayedexpansion
    set /p Backup=entrez le ou les chiffre(s) : 
    set /a CptHrs=0
    for /F "delims=/:," %%i in ("%Backup%") do call :incrementation
    goto end
    :incrementation
    set /a CptHrs+=1
    :end
    set CptHrs=
    autre tentative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /F "delims=/:," %%i in ("%Backup%") do set /A CptHrs+=1
    Bon, je me doute qu'il y a un problème dans cette boucle, mais pourquoi ? et où?

    Merci de votre aide précieuse!

    Cdlt,

    PS : je devrais sans doute copier le résultats dans un fichier temporaire, mais j'aimerais, autant que faire se peut, éviter ce genre d'action.

  2. #2
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    Citation Envoyé par CoStiC Voir le message
    Avis à tous ceux qui vont répondre, je sais qu'il est plus aisé de faire ce script en perl ou python.


    Citation Envoyé par CoStiC Voir le message
    Je sais également qu'il y a les tâches planifiées sous windows.
    pas compris..
    Citation Envoyé par CoStiC Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    Setlocal enbledelayedexpansion
    set /p Backup=entrez le ou les chiffre(s) : 
    set /a CptHrs=0
    for /F "delims=/:," %%i in ("%Backup%") do call :incrementation
    goto end
    :incrementation
    set /a CptHrs+=1
    :end
    set CptHrs=
    Citation Envoyé par CoStiC Voir le message
    Bon, je me doute qu'il y a un problème dans cette boucle, mais pourquoi ? et où?
    d'ordre syntaxique

    - ENABLEdelayed.. et pas ENBLEdela...
    - la variable "CptHrs" ne s'incrémente pas (il n'y a pas de boucle)
    - ..etc

    Citation Envoyé par CoStiC Voir le message
    autre tentative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /F "delims=/:," %%i in ("%Backup%") do set /A CptHrs+=1
    - CptHrs sera toujours 1 car la valeur de la variable %Backup% est UNE chaîne de caractères

    voici une des solutions possibles:

    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
    X:> type batfile.cmd
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    @echo off
    setlocal
    
    set /p Backup=entrez le ou les chiffre(s) : 
    for %%x in ("/" ":" ",") do call set Backup=%%Backup:%%~x=,%%
    
    for %%a in (%Backup%) do set/a CptHrs+=1
    set CptHrs
    
    endlocal
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    
    X:> batfile
    entrez le ou les chiffre(s) : 12:54/988,3214/14/"hello world",9
    CptHrs=7

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Queeeeeeellle tristesse!
    Bon, je comptais répondre pour ne pas passer pour le dernier des cake, honneur oblige!

    Citation Envoyé par I'm_HERE Voir le message
    pas compris..
    C'est normal je pensais au besoin que j'ai et qui me conduit à écrire ce batch... mais, normalement, ça n'est pas significatif pour la suite

    d'ordre syntaxique

    - ENABLEdelayed.. et pas ENBLEdela...
    Bon, bon ça va! j'ai retapé à la mano, c'est pas du simple copier coller!!!

    - la variable "CptHrs" ne s'incrémente pas (il n'y a pas de boucle)
    - ..etc



    - CptHrs sera toujours 1 car la valeur de la variable %Backup% est UNE chaîne de caractères

    voici une des solutions possibles:

    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
    X:> type batfile.cmd
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    @echo off
    setlocal
    
    set /p Backup=entrez le ou les chiffre(s) : 
    for %%x in ("/" ":" ",") do call set Backup=%%Backup:%%~x=,%%
    
    for %%a in (%Backup%) do set/a CptHrs+=1
    set CptHrs
    
    endlocal
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    
    X:> batfile
    entrez le ou les chiffre(s) : 12:54/988,3214/14/"hello world",9
    CptHrs=7
    Bon, merci, je fais un test de suite, mais je dois avoué que je suis un peu perplexe pour deux ou trois choses :
    -Pourquoi un
    do call set...
    ?
    - et qu'est-ce que c'est quoi que le
    %~
    ???

    [edit] mis à part le fait qu'il s'agit de l'extension de l'argument... [/edit]

    Et oui, je suis découvert, je suis une tanche en dos batch...

    PS : Merci Merci beaucoup, tu m'enlèves un sapin du pied!

  4. #4
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    - utilisation du CALL pour :
    1- forcer la lecture des variables
    2- éviter d'activer l'expansion retardée
    3- plus facile à gérer les caractères réservé
    ..etc

    pour le %~

    FOR /?

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    - utilisation du CALL pour :
    1- forcer la lecture des variables
    2- éviter d'activer l'expansion retardée
    3- plus facile à gérer les caractères réservé
    ..etc

    pour le %~

    FOR /?
    voilà... ou meme call /?

    merci pour tout! Rapide, clair, net et concis! tout ce que j'aime!

  6. #6
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    de rien,

    ne pas oubliez le

  7. #7
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    de rien,

    ne pas oubliez le
    Je n'oublierai pas, dès que je constate que ça fonctionne

  8. #8
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    sinon voici une autre manière avec Gnu AWK

    ::script.awk::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN \
    {
     FS="[:/,]"
    }
    {
    print NF
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo %time% | gawk -f script.awk
    ou bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk -f script.awk fileInput.txt

  9. #9
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    lol... oui, awk est autrement plus efficace... mais il faut que j'envoie ça à des personnes qui ont un environnement windows, sur lesquels ils ont des droits extremment restreints, et qui n'y connaissent rien.
    Pour etre honnete, je ne suis meme pas certain que cela fonctionne, parce que le but de ce code est de faire des taches planifiées (entre autres), et celles ci sont exclues du profil. Bref, caca total.
    Merci pour tout, cela fonctionne parfaitement.

    Citation Envoyé par I'm_HERE Voir le message
    sinon voici une autre manière avec Gnu AWK

    ::script.awk::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN \
    {
     FS="[:/,]"
    }
    {
    print NF
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo %time% | gawk -f script.awk
    ou bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk -f script.awk fileInput.txt

  10. #10
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut comment faire son cake!
    Bon, on va encore me dire que je suis un peu pinailleur, mais j'ai un problème avec tout ça en fait.
    Avec cette solutions, je ne récupère pas directement les valeurs entrez par l'utilisateur.
    Certes, j'incrémente un compteur qui permet de vérifier que je n'ai pas 500000 heures programmées dans ma journée.
    En revanche, j'aimerais bien utiliser les heures que l'utilsateur à entré pour programmer des tâches planifiées.
    Or, je suis obligé de créer de nouvelles lignes pour retirer les dates une par une.
    Tout ne sera pas optimsé.

    Ma question : Comment faire pour récupérer les valeurs entrées par l'utilisateur?

  11. #11
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par CoStiC Voir le message
    :Comment faire pour récupérer les valeurs entrées par l'utilisateur?
    salut,

    le 1er code fais-ça

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/12/2010, 23h09
  2. compter le nombre de mots dans une chaine en php
    Par hadjiphp dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2009, 21h20
  3. Réponses: 4
    Dernier message: 04/03/2009, 10h18

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