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 :

Lecture d'un fichier texte dans un batch file


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 68
    Points
    68
    Par défaut Lecture d'un fichier texte dans un batch file
    Bonjour,

    je ne suis pas sur de poster au bon endroit. Desole si ce n'est pas le cas.

    J'essaie de creer un batch file qui va lancer un script essbase. Avant cela, je dois recuperer une valeur issue d'une requete SQL. J'ai utilise osql pour executer ma requete et cela fonctionne tres bien. Je place le resultat de cette requete dans un fichier texte.

    C'est la que le probleme se trouve, je n'arrive pas a lire correctement mon fichier teste pour recuperer ma valeur.

    Voici le contenu du text file:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            
     ------ 
       2007 
    
    (1 row affected)
    Je veux recuperer le 2007. J'ai essaye quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SET PARSEARG="eol=# tokens=1,2,3 delims= "
    FOR /F %PARSEARG% %%i IN (%OUTPUT_FILE%) DO SET XXX=%%i
    FOR /F %PARSEARG% %%i IN (%OUTPUT_FILE%) DO SET ZZZ=%%i
    FOR /F %PARSEARG% %%i IN (%OUTPUT_FILE%) DO SET CLR_ST_YEAR=%%j
    FOR /F %PARSEARG% %%i IN (%OUTPUT_FILE%) DO SET YYY=%%k
    @echo CLR_ST_YEAR=%YYY% >> test.log
    mais ca ne fonctionne pas.

    Quelqu'un en saurait-il plus sur ce pb ?

    Merci

    Cyril

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 56
    Points
    56
    Par défaut
    Consulte la doc de osql, et vois si tu peux formater le résultat de la requête ?

  3. #3
    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
    Effectivement la solution la plus simple est de formatter directement la sortie pour n'avoir que l'info qui t'interesse.

    Sinon je te conseille de relire la FAQ batch et l'utilisation des boucles FOR. Parcours ce forum, il y a de nombreux exemples d'utilisation. La tu n'as clairement pas compris commme l'utiliser.
    Lorsque tu veux parcourir toutes les lignes d'un fichier, un seul FOR suffit, les tokens c'est pour récupérer des parties d'une ligne.

    Ou alors il manque des explications à ton problème.

    Aussi si ton fichier output est toujours identique à part pour le 2007, tu peux t'en sortir avec des findstr bien parametré ou tu exclues à chaque fois les lignes qui ne t'interessent pas et sont toujours identiques.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut,

    J'ai exactement le même problème, et j'ai beau lire tout plein de sujets j'avoue ne pas comprendre comme faire ça ... au mieux j'arrive à chopper la ligne complète, mais pas ma valeur.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Points : 115
    Points
    115
    Par défaut
    Moi se que je ferait...
    Cela n'est que m'ont avis,

    -Soit effectivement je paramètre la sortie de osql pour ne voir que la valeur souhaitée dans ton fichier text.
    -Soit Faire ton script en KIXStart qui est un language de script qui offre bien plus de possibilités que le Batch...
    -Ou alors je ferai peut-être un mini-programme en C qui va transformer ton fichier texte en n'y laissant que la valeur dont tu as besoin. Maintenant celle ci serait vraiment dans le dernier cas, mais avec du Kix ou Vbscript tu devrait arriver a faire cela sans aucun soucis...

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Merci pour ta réponse, mais j'ai des contraintes "externes" qui font que je ne peux pas formater ma sortie ni utiliser autre chose qu'un batch.

    Cela dit, après de longues recherches et avec un peu d'aide j'ai fini par réussir.

    J'ai juste modifié ma requete pour que le résultat soit sous cette forme, ça m'a semblé plus simple pour isoler la ligne qui m'intéresse (surtout qu'il arrive que j'ai plusieurs lignes). Au lieu de faire truc genre "SELECT ANNEE FROM TABLE ..." je fais un "SELECT 1, ANNEE FROM TABLE .." pour obtenir dans mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ------ 
    1   2007 
    
    (1 row affected)
    Du coup mon batch récupère le 1 et le 2007. Ca donne un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For /f "tokens=1,2 delims= " %%a In (%output_file%) Do (
      IF %%a==1 (
        echo Année : %%b 
        SET year=%%b
      )
    )
    Comme j'ai eu du mal à trouver tous les paramètres, j'explique au cas où ça pourrait aider quelqu'un ;O)
    Il y a une boucle (le FOR) qui parcours les lignes de mon fichier %output_file%. A chaque ligne, prends comme résultats tout ce qui est séparé par des espaces (delims= ). Ca lui donne des résultats, et il ne prend que les deux premiers (tokens=1,2). Le premier va dans %%a et le second dans %%b (j'ai pas bien compris comment ou pourquoi, mais le fait est que ça marche ;O).
    Donc en gros il récupère ça :
    ligne 1 : %%a==------ ; %%b==
    ligne 2 : %%a==1 ; %%b==2007
    ligne 3 : %%a== ; %%b==
    ligne 4 : %%a==(1 ; %%b==row
    D'où l'intérêt d'ajouter le 1 dans le select, ça permet très simplement d'isoler la ligne qui m'intéresse. Avec le IF sur la valeur de %%a, je ne traite que la ligne voulue et élimine les autres.

    Voila, j'espère que j'ai été clair et que ça peut aider !

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Réponse peut etre un peu tardive, mais si jamais ca peut aider.

    Afin de faire ce que tu disais (à savoir extraction de données via une requete et réutilisation de celle-ci), j'utilisai la commande bcp qui a cette tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bcp "SELECT ..." queryout c:\chemin\fichier.csv -c -t; -S nom_server -U user -P password
    Dans mon exemple c'est un fichier csv avec separateur ";"
    Mais en te debrouillant bien, le séparateur par defaut étant de memoire l'espace, tu devrais pouvoir recupérer que ta donnée et donc oublier tout ce qui est souci de formatage et parcours de fichier.

Discussions similaires

  1. Réponses: 17
    Dernier message: 18/08/2014, 15h17
  2. Réponses: 11
    Dernier message: 10/05/2011, 09h21
  3. Lecture fichier texte dans applet
    Par julien1451 dans le forum Applets
    Réponses: 3
    Dernier message: 15/08/2009, 14h52
  4. [AC-2007] Lecture d'un fichier texte et import dans Access
    Par Huma7 dans le forum VBA Access
    Réponses: 7
    Dernier message: 15/05/2009, 17h04
  5. Lecture d'un fichier texte dans un projet TOMCAT
    Par brice_nice dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/07/2005, 15h04

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