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

Fortran Discussion :

Envoi de fichier pour automatiser un programme


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut Envoi de fichier pour automatiser un programme
    Bonjour,

    Voilà, je passe actuellement un bout de prog fortran de linux à windows.

    C'est un programme qui lors de son execution propose des choix (1,2,...)

    Sous unix il était possible de taper : nomduprog.exe nomdufichieràtraiter < Fichier_texte_contenant_des_choix_prédéfinis_pou_automaitser_le traitement.

    Comment faire pour permettre l'utilisation du < ... sous windows ?

    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Unix / Linux sont plus fort que Windows pour traiter des infos via le pipeline.

    Comme je ne connais pas bien Unix / Linux, il m'est difficile de traduire exactement ta commande, mais sous Windows, il faut souvent utiliser plus d'une commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    copy Fichier_texte_contenant_des_choix_prédéfinis_pou_automaitser_le traitement nomdufichieràtraiter
    nomduprog.exe nomdufichieràtraiter

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Sylvain Bergeron
    Comme je ne connais pas bien Unix / Linux, il m'est difficile de traduire exactement ta commande, mais sous Windows, il faut souvent utiliser plus d'une commande
    Ce n'est pas equivalent. Dans l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myprog filename < predefined_choices
    filename est un argument au programme, et predefined_choices sont envoyes sur stdin (on parle de redirection). C'est utile si le programme pose des questions "interactives" et que l'utilisateur n'est pas en face pour repondre. Je ne connais pas Windows, mais je sais que la redirection de stdout (i.e. affichage sur console redirige vers fichier) existe. Pour celle de stdin, il suffit de tester sur un programme simple...

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Sous Windows (mode console), le stdin peut aussi être alimenté par "< fichier".

    Je ne vois donc pas pourquoi ça ne fonctionnerait pas sans modif.

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Sylvain Bergeron
    Sous Windows (mode console), le stdin peut aussi être alimenté par "< fichier".

    Je ne vois donc pas pourquoi ça ne fonctionnerait pas sans modif.
    Oui, c'est ce que je pense aussi. Si le PO revient un jour, il nous le dira peut-etre

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut
    Je confirme, chez moi le "< fichier" ne marche pas.
    Remarquez, j'utilise un read * pour récupérer l'argument de ma commande. Est-ce que cela peut jouer ?

  7. #7
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    je ne crois pas que tu ait de l'équivalent windaube pour le pipeline unix!!!

    cependant pour remédié à cela t'as deux choix: le premier, c'est changer le shell de windaube (-atention à pas cramé l'ordi)
    le second c dans ton prog tu lui mets l'option qui va lire dans un fichier spécifique en gros si y a pas l'option alors tu demande en ligne de commande, et si y a l'option, et bin lit le fichier truc....

    P.S. C'est chiant de programmer sous windaube hein!!!!!

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par genteur slayer
    je ne crois pas que tu ait de l'équivalent windaube pour le pipeline unix!!!
    Ca s'ecrit Windows, et la redirection de stdin semble documentee.
    Et, rigoureusement parlant, une redirection et un pipe ne sont pas la meme chose (les redirections lient une commande a un/des fichier(s), un pipe lie deux commandes entre elles).

    Citation Envoyé par arthagus
    j'utilise un read * pour récupérer l'argument de ma commande. Est-ce que cela peut jouer ?
    read() lit par defaut stdin, donc cela devrait marcher (a moins que le compilateur ne considere pas la meme stdin que la shell Windows, mais ce serait bizarre...).
    Il faut faire un petit programme de test:
    Code foo.f : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          program foo
          implicit none
     
          integer i
     
          read(*,*) i
          print *, 'Input value: ', i
     
          end
    et lui envoyer un fichier contenant une ligne avec une valeur entiere. On y verra plus clair (je n'ai pas Windows sous la main).

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Ça fonctionne très bien sous Windows XP. J'ai aussi essayer de confondre Windows en complexifiant la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test.exe -liste d'arguments +inutiles pour esayer de confondre Windows < input.txt > resultat.txt
    et ça fonctionne très bien.

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut
    Bonjour et merci pour votre aide. J'ai testé le stdin avec un petit prog ça marche...oui et non.

    Disons que à ça marche si je tape : test.exe < toto

    Mais ça ne marche pas si je lance test.exe puis au moment où il me demande une valeur je lui va va lire dans tot avec < toto.
    Or c'est un truc comme ça que je voudrais faire. (désolé je n'ai peut être pas été assez clair). Ce que je voudrais faire c'est en fait : je mance mon prog test.exe. Au cours de l'execution (au tout début en fait), il me demande le nom du fichier à traiter. Et c'est à ce moment là que je voudrais lui dire nom_du_fich_a_traiter < machin.

    C'est un programme qui doit être pratique à utiliser et donc, ça serait bien de ne pas devoir ouvrir un cmd, puis aller dans le répertoire qui contient l'executable puis taper toute la ligne de commande "test.exe nom_du_fich_a_traiter < machin" pour le lancer, mais plutot le lancer via l'explorateur et au moment de la demande pouvoir taper "nom_du_fich_a_traiter < machin"

  11. #11
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par arthagus
    Or c'est un truc comme ça que je voudrais faire. (désolé je n'ai peut être pas été assez clair). Ce que je voudrais faire c'est en fait : je mance mon prog test.exe. Au cours de l'execution (au tout début en fait), il me demande le nom du fichier à traiter. Et c'est à ce moment là que je voudrais lui dire nom_du_fich_a_traiter < machin.
    ??? Une redirection est interpretee par la shell. Une fois que ton programme est lance, le caractere '<' n'a plus de signification speciale. Ce que tu essaies de faire est impossible... et inutile ! Si ton programme demande le nom du fichier a traiter, donne-le lui directement !

  12. #12
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut
    Dans mon exemple, le prog demande seulement le nom_du_fichier_a_traiter. le fichier "machin" du < machin n'étant pas programmé vu que comme tu l'as dit c'était natif au shell.
    Du coup, je me demande...Est-il possible de programmer simplement une sorte de stdin en fortran.
    L'idée étant que au moment où il me demande le "nom_du_fichier_a_traiter", si je rentre "nom_du_fichier_a_traiter < machin", mon prog detecte le "machin" est le fait fontionner comme un stdin ?
    C'est possible ça ?

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Comme je suis pas certain de bien comprendre...

    Tu as un programme lisant présentement sur stdin. Tu voudrais lancer ce programme et qu'il demande dans quel fichier lire ce qu'il lit présentement sur stdin.

    Je vois 2 solutions :

    • Tu modifie le programme pour qu'il lise dans un fichier plutôt que sur stdin.
    • Tu utilises un programme demandant le fichier à traiter et lancant le programme original par system("prog <"//trim(Fichier))


    Pour la deuxième solution, il existe des alternatives utilisant des «shell script»

  14. #14
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut
    C'est bien ce que je souhaite faire.

    La modification pour lire dans un fichier plutôt que dans stdin, c'est compliqué à ton avis? Je ne voudrais pas à avoir à faire des modifications importantes dans mon programme.

    Sinon, une dernière question (et après j'arrête avec ça). Est-il possible d'encapsuler un fichier .exe dans un autre .exe ?

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Citation Envoyé par arthagus
    La modification pour lire dans un fichier plutôt que dans stdin, c'est compliqué à ton avis? Je ne voudrais pas à avoir à faire des modifications importantes dans mon programme.
    Tu dois ouvrir explicitement le fichier que tu veux lire et changer les read(* pour des read(unit selon le unit que tu auras choisi. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    integer, parameter :: UnitReponses = 80
    ...
    write(*,*) 'Fichier à lire ?'
    read(*,*) FichierReponses
    open(UnitReponses,FichierReponses,status='old')
    ...
    !write(*,...
    !read(*,...
    read(UnitReponses,...
    ...
    Dans l'exemple, j'utilise le unit 80. Il est fortement recommendé d'utiliser un nombre > 10. De plus, j'utilise une constante symbolique pour faciliter la lecture (read(FichierReponses est plus informatif que read(80,...) et faciliter l'entretien futur (je pourrai facilement changer de unit au besoin, incluant de revenir au stdin en utilisant le unit correspondant à *).

    Citation Envoyé par arthagus
    Sinon, une dernière question (et après j'arrête avec ça). Est-il possible d'encapsuler un fichier .exe dans un autre .exe ?
    Pas au sens littéral. Ce qui peut être fait est de convertir celui à encapsuler en librairie et de référer à la librairie dans l'appelant. Si c'est pour ton problème de redirection, cette piste ne fonctionnera pas, le deuxième programme doit être lancé comme processus distinct à partir de l'interpréteur de commande (shell) pour que la redirection puisse s'effectuer.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2006, 13h17
  2. Réponses: 12
    Dernier message: 24/05/2006, 12h45
  3. Cherche conseil pour l'envoi de fichiers
    Par ehmppowa dans le forum Applets
    Réponses: 4
    Dernier message: 17/01/2006, 13h39
  4. [Upload] Barre de chargement pour envoi de fichier
    Par Caerbannog dans le forum Langage
    Réponses: 3
    Dernier message: 08/11/2005, 12h27
  5. Réponses: 6
    Dernier message: 20/10/2005, 08h59

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