Résultats de 1 à 8 sur 8

Sujet : fortran et pro*c

  1. #1
    Membre MP
    Inscrit
    août 2013
    Messages
    4

    fortran et pro*c

    bonjour,

    je suis en stage et je dois developper une application en fortran qui utilise un sous-programme ecrit en pro*c.
    Le petit souci c\'est que le ss-prog genere un fichier, appelons le toto.txt, et que ce fichier doit etre ensuite lu par le programme principal en fortran.
    Le fichier est constitué de chaines, d\'entier, et de rééls double précision, le tout ecrit en c par la commande fwrite. (un fwrite par varialbe a ecrire). Je me demandait donc si quelqu\'un pourrait me dire si ce que j\'essaie de faire est possible, et si tel est le cas comment s\'y prendre pour relire ce fichier en fortran, quite a l\'ecrire d\'une autre maniere en c.
    Un autre de mes probleme, et c\'est un peu a cause de ça que j\'utilise des fichiers, est que je n\'ai pas réussi a utiliser de chaines de caracteres ni de tableau en parametres de mes ss-prog.
    Pour les tableaux je ne sais pas si je dois allouer l\'espace ds le ss-prog ou ds le prog principal, et pour les chaines disons que je ne comprend pas pourquoi ça ne marche pas. Dans le prog fortran, j\'ai declaré un truc genre \"character*20 tv_nomFichier\", et dans le ss-prog j\'avais mis un parametres déclaré commme ça :\" char tv_nomFichier[20]\", puis j\'ai essayé avec un pointeur sur chaine ( char *tv_nomFichier[20]). ça serait très très très aimable de m\'aider, paske je commence a plus savoir comment m\'y prendre...

    Merci d\'avance...

    G oublié un petit détail : le tout tourne sur VMS...

  2. #2
    Membre MP
    Inscrit
    août 2013
    Localisation
    12100
    Messages
    687
    Je ne sais pas ce qu\'est le pro*C, mais je traite le problème du fichier .txt.
    Logiquement, s\'il s\'agit d\'un fichier .txt, il ne doit contenir que des caractères.
    Tu peut le vérifier en l\'ouvrant par le bloc note ou n\'importe quel traitement de texte.
    En fortran il faut l\'ouvrir par l\'instruction OPEN en fichier séquentiel et le lire par un READ. Le format contiendra quelque chose comme 80A1 si la chaine fait un maximum de 80 caractères par ligne. Si la structure d\'une ligne n\'est pas connu, il faut prendre caractère par caractère et analyser en fonction de ce qu\'on connaît des données.
    Ainsi ce peut être en format fixe, dans ce cas par un format Had\'Hoc on peut lire directement. Soit se sont des donnée séparées par un séparateur soit virgule, soit TAB (ASCII 09) et donc ce cas, il faut analyser caractère par caractère, définir la structure et faire un READ en mémoire pour obtenir la donnée cherchée.
    Il faudrait me donner un exemple d\'une ligne telle qu\'elle se présente dans le .TXT...
    Personnellement, je gère ce problème par une bibliothèque de sous programmes écrits en assembleur ou en Fortran. Mais pour l\'instant, tout cela est en 16 bits et en FORTRAN77.
    Dans les projets, j\'ai mis un projet pour réaliser cela sous Windows en assembleur avec compatibilité avec des langages de hauts niveau (dont le FORTRAN).

    Moby
    moby

  3. #3
    Membre MP
    Inscrit
    août 2013
    Messages
    4
    Le pro*c c\'est juste du C qui fait des appels dans un bd oracle. C\'est surtout a cause du passage des parametres que ça me pose des problemes.
    Sinon la constitution du fichier est connue, mais meme si il y a l\'extension .txt ce n\'est pas du format texte. C\'est du format binaire, avec pour chaque enregistrement et dans l\'ordre : un entier, une chaine de 4 caracteres, deux chaines de 20 caracteres chacune, un entier long, et trois rééls double precision (double en C).
    Par contre j\'aurais un moyen de me débarasser de l\'utilisation de ces fichiers, mais ça implique d\'utiliser autre chose que je ne suis pas sur de maitriser (j\'ai meme de forts doutes) : ça consisterait a passer au ss-prog un tableau par variable a recuperer, donc 8 tableaux dynamiques declarés par \"type, dimension(, allocatable :: nom\" (en fortran 90), a remplir ces tableaux en C puis a le retourner au prog principal (ecrit en fortran).
    Le probleme, je pense, va résider dans le fait de la reservation de l\'espace, je ne sais pas si je dois allouer l\'espace dans le programme principal, ou dans le ss-prog, et quel type de donnees je dois transmettre au ss-prog pour que les parametres soit en sortie, avec l\'espace necessaire alloué bien kom y fo.

  4. #4
    Membre MP
    Inscrit
    août 2013
    Localisation
    12100
    Messages
    687
    En FORTRAN tu peux toi même créer des fichiers séquentiel et direct par les instructions OPEN, READ, WRITE.
    Personnellement sous DOS, j\'ai écrit des programmes assembleurs (avec INT 21h) qui permettent d\'accéder à ces fichiers (créer, se positionner, lire, écrire).
    >Ainsi, lorsque je n\'ai pas besoins de tables rangées, c\'est nettement plus facile.
    Mais les instruction FORTRAN permettent aussi de faire tout cela.
    Je ne sais pas si tu peut extraire ces TXT de oracle, mais si c\'est le cas, tu peux les lire par un READ sur un format qui décrit les données comme tu les donne.
    Si tu peux tout laisser en mémoire (car pas trop grand) tu peux créer des tableaux dans un COMMON qui est commun aux sous programmes et au programme principal. Je suppose que ça doit exister en C.

    Moby
    moby

  5. #5
    Membre MP
    Inscrit
    août 2013
    Messages
    4
    Le COMMON c\'est pas une mauvaise idée, mais pour que le sous programme soit réutilisable (bé ouai j\'programme pas pour moi) c\'est pas possible. Je me le garde derriere l\'oreille en dernier recours, mais ce qu\'il fo que je trouve précisement (paske de jours en jours le schmilblik avance) c\'est comment on fait pour passer une chaine de caracteres en parametre de sortie a un sous prog ecrit en c (et ou le parametre formel est ecrit avec un truc genre \'char *tv_nom\', ou encore \'char *tv_nom[4]\'. Donc en fait une chaine de caracteres, statique ou dynamique, mais une chaine de caracteres. J\'ai pas mal de pb avec ça, y me renvoi que des chaines vides le sous prog, et c\'est un peu frustrant.... J\'ai vu qu\'il y avait ça en fortran : %val, %ref, et %descr, mais je ne sais pas m\'en servir et je n\'ai pas ou peu trouvé de doc la dessus. ça s\'rait pas ça par hazard qui sert a gérer les parametres??

  6. #6
    Membre MP
    Inscrit
    août 2013
    Localisation
    12100
    Messages
    687
    Je ne connaît^pas la manière dont le C procède.
    Pour le FORTRAN si tu écrit:

    call monsprog (\"c\'est ma chaine\&quot

    le fortran empilera l\'adresse du premier octet de la chaine.

    Dans le sous programme, tu récupérera cette adresse et tu pourra la traiter comme bon te semble. Bien sûr il faut connaître la longueur de la chaine, ou la terminer par un caractère particulier tel que $ ou un null pour en analyser la longueur.
    Il faudrait poser la question sur le FORUM du C pour savoir comme le C procède. Il y a de forte chance pour qu\'il fasse comme le FORTRAN, mais ça je n\'en suis pas sûr.

    Tu peux passer toi meême l\'adresse de la chaîne en procédant ainsi:

    character*18 machaine
    data machaine /\'ceci est ma chaine\"/
    ....
    call monsprog(machaine)

    dans le sous programme

    subroutine monsprog( mystring)
    character*20 mystring

    mystring, variable muette, contient la chaine transmise. ou plus exactement pointe sur le 1er carctère de la chaine.

    moby
    moby

  7. #7
    Membre MP
    Inscrit
    août 2013
    Messages
    4
    Ton histoire de data m\'a fait avoir une idée qui a enfin marché : j\'ai inclu mes chaines de caracteres dans une structure declarée en fortran dans un fichier .inc, et comme par magie tous les parametres sont bien passés....

    Gros merci pour le coup de main
    A+

  8. #8
    Membre MP
    Inscrit
    août 2013
    Localisation
    12100
    Messages
    687
    Bonne chance et à la prochaine
    Moby
    moby

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!