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 :

wait bar dans une subroutine fortran appelée par R


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut wait bar dans une subroutine fortran appelée par R
    Bonjour,

    Je cherche à mettre au point un barre de progression dans une subroutine fortan, sachant que celui-ci est appelé initialement par un programme R.
    L'avantage de linux c'est que les fonctions write() et print passent très bien pour ce genre de chose, en revanche sur une plate-forme windows, les print et les write font planter le programme.
    Je sais qu'il existe, pour passer outre le problème les fonctions 'dblepr' ; 'intpr' ; et 'realpr'. Mais elle ne sont pas du tout adaptée à ce que je veux faire.

    Quelqu'un a-t-il une idée pour faire afficher dans R une chaîne de caractères à partir de fortran ?

    Merci beaucoup d'avance pour vos solutions.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2016
    Messages : 4
    Par défaut Ca marche ... mais pas tout le temps !
    Bonjour,

    quand on est un 'vieux' programmeur, le langage et le comportement de R sont des plus étranges ...

    Tu peux essayer d'écrire dans la console R simplement avec un write(6,*) : ça marche ... quelque fois. De plus, il faut que la console soir visible, que le curseur soit positionné tout en bas, que R n'écrive pas ses fonctions, ...

    On reste quand même loin d'une progress bar.

    Bon courage !
    Jean

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut
    Tu peux essayer d'écrire dans la console R simplement avec un write(6,*) : ça marche ... quelque fois.
    Jean
    Que fait l'adresse '6' de plus que le write(*,*)?
    Heureusement, aucune fonction R de mon programme n'intervient au cours de la progression de ma boucle Fortran.
    Pour l'instant j'ai réglé le problème en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call intpr(bar, -1, ni, 0)
    bar est la chaine de caractère correspondant à ma progressbar, ni une variable de type int et 0 permet ne pas afficher la variable (je n'ai donc que la chaîne de caractères).
    Mais c'est très bidouillé puis ma progress bar apparaît dans sa totalité autant de fois qu'elle se met à jour, ce qui est relativement laid ...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2016
    Messages : 4
    Par défaut
    le canal 6 est le stdout : l'organe de sortie standard. Donc l'écran. Je pense que R redirige les sorties écran vers sa console.

    Au fait tu appelles ta fonction par .FORTRAN() ou tu lances un executable externe ?
    Jean

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut
    Non j'appelle mon programme fortran depuis R grâce à la commande .Fotran(). C'est mieux de lancer une commande bash qui appelle le programme ? Mais dans ce cas il faut que je revois l'intégralité de mon package car je transmet à Fortran 65 arguments .. J'ai bien peur que le système d'écriture/lecture fichier me prenne beaucoup plus de temps d'exécution ...

    Si write(6,*) permet de rediriger en sortie standard, dans ce cas que fait write(*,*) exactement ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2016
    Messages : 4
    Par défaut
    L'appel par .FORTRAN() est bien meilleur ! Ce qui m'a troublé c'est que tu puisses afficher quelque chose avec call intpr.

    Comme je n'ai jamais utilisé write(* (!) je ne sais pas la différence avec write(6 !!

    Autre point : dans la relation entre R et FORTRAN, ce qui prend 'beaucoup' de temps est le passage de paramètre. Il faut essayer de réduire le nombre et la taille de ceux-ci.

    A+
    Jean

  7. #7
    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
    write(6, versus write(*, : le * correspond au stdout (ou au stdin dans read(*,). Le 6 est un numéro de unit, lequel (6) est automatiquement lié au stdout, permettant aux anciens programmes de fonctionner normalement. Mais ce n'est pas garanti, l'association pouvant être changée par un open(6,. Donc, write(*, écrit toujours sur stdout alors que write(6, écrit sur stdout par défaut.

    Pourquoi 6 ? Parce qu'avant d'être des file units, ces numéros étaient des numéros de port physique. Et sur un ordinateur IBM des années 60, le line printer était toujours branché dans le port 6. Et dans ce monde pré moniteur, le stdin était le lecteur de cartes perforées, branché dans le port 5...

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut
    Bonjour Sylvain,

    Je vous remercie pour votre réponse, je comprends mieux pourquoi ce 6 et effectivement je me souviens d'avoir déjà redirigé ma sortie vers un fichier que j'avais 'ouvert en 6'...
    Finalement je ne pense pas que le fait d'utiliser write(* ou write(6 change quelque chose à mon problème, puisque mon programme doit s'exécuter sous windows, je préfère garder ma solution pour le moment.

    Je vais résoudre cette question, merci encore à tous pour votre aide précieuse !

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

Discussions similaires

  1. Jquery dans une page PHP appelée par CRON
    Par nicolas2603 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 17/02/2014, 16h18
  2. Appel d'une subroutine fortran en c++
    Par Ankain dans le forum Débuter
    Réponses: 1
    Dernier message: 12/03/2012, 18h44
  3. appeler une matrice dans une subroutine
    Par brahim20 dans le forum Fortran
    Réponses: 2
    Dernier message: 01/07/2010, 08h51
  4. [Fortran 77] Déclaration dans une subroutine
    Par feynman dans le forum Fortran
    Réponses: 4
    Dernier message: 18/04/2008, 17h41
  5. progress bar dans une status bar ?
    Par raggadoll dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/11/2005, 15h17

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