Ecrire les resultats dans un fichier

pingous Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je suis entrain de gerer un fichier de donnees sous forme de tableau qui contient des lignes et des colonnes. Je voudrais extraire de ce tableau un ceratin nombre d'info particuliere et pour cela j'ai besoin d'ecrire un code en fortran qui va dans le tableau, me soustrait ces info et me les ecrit dans un autre fichier sous forme de tableau . j'ai fait quelque chose qui compile mais a l'execution je n'ai aucune info dans le fichier de sortie. Merci de m'envoyer ce que vous savez a ce sujet, ca m'aidera a gagner en temps

bien a vous
A voir également:

4 réponses

cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   131
 
Bonsoir,

Envoie déjà ce que tu as fait.
0
pingous Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Slut Cchristian
voila le tout bout de programme que j'ai ecrit. en realite le nombre de "case" dans le "Select Case" est tres grand. mais je voulais juste faire un essai

PROGRAME ALASKA1

! DECLARATION OF VARIABLES
IMPLICIT NONE

INTEGER, PARAMETER::ROWSIZE=1983177, COLUMNSIZE=11
CHARACTER, DIMENSION(1:ROWSIZE,1:COLUMNSIZE)::A,B,C
INTEGER:: I,J,FIPCODE



OPEN(UNIT=10, FILE='Alaska.DAT', STATUS='OLD')
OPEN(UNIT=20, FILE='OUPOUT.DAT', STATUS='OLD')
OPEN(UNIT=30, FILE='OUPOUT1.DAT', STATUS='OLD')


! INPUT

DO I=1,ROWSIZE


DO J=COLUMNSIZE,1
READ(10,*) A(I,J)
ENDDO
ENDDO

IF (J==COLUMNSIZE) THEN
READ(10,*) FIPCODE
SELECT CASE(FIPCODE)

CASE(01010)
READ(10,*) ((B(J,J),I=1,ROWSIZE),J=1,COLUMNSIZE)
WRITE(20,*) B(I,J)

CASE(01013)
READ(10,*) ((C(J,J),I=1,ROWSIZE),J=1,COLUMNSIZE)
WRITE(30,*) C(I,J)

END SELECT
ENDIF



CLOSE(10)
CLOSE(20)
CLOSE(30)
END

bien a toi!
0
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   131
 
Bonjour,


Mon environnement et mes connaissances en Fortran se limitent à Fortran 77, je ne peux donc pas
tester ton code.
Une question malgré tout se pose: Pourquoi tes fichiers en sortie sont-ils déclarés OLD, et pas NEW ?
OPEN(UNIT=20, FILE='OUPOUT.DAT', STATUS='OLD') 
OPEN(UNIT=30, FILE='OUPOUT1.DAT', STATUS='OLD') 

Afin de mieux cerner le problème, il serait nécessaire d'ajouter IOSTAT= et ERR= et de voir le résultat.
          IO_ORDRE                       = 'OPEN_OUTPUT.DAT'        
          OPEN   (UNIT   = 20,    IOSTAT = IO_RC, 
     S            FILE   = 'OUPOUT.DAT',     STATUS = 'NEW',
     S            ACCESS = 'SEQUENTIAL',   FORM   = 'UNFORMATTED', 
     S            ERR    = 15)
          .....................................
          .....................................

Et/Ou un INQUIRE par exemple :

      IO_ORDRE          = 'INQUIRE_OUTPUT.DAT'        
       INQUIRE   (FILE   = 'OUPOUT.DAT', 
     S            OPENED = F_OP,           EXIST  = F_EX,
     S            ERR    = 15 ) 
       PRINT *,    ''OUPOUT.DAT status OPEN ', F_OP, ' et EXIST ', F_EX.
          ........................................
         ........................................    
         GO TO 110
15      PRINT *,' '
          PRINT *, 'ANOMALIE ENTREE/SORTIE FS : ',    IO_RC, ' SUR ORDRE :'            
     S         ,IO_ORDRE 
110    CONTINUE 
 

0
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   131
 
Bonjour,

RECTIFICATIF :

Il manque IOSTAT= IO_RC sur l'ordre INQUIRE :

      IO_ORDRE          = 'INQUIRE_OUTPUT.DAT'        
       INQUIRE   (FILE   = 'OUPOUT.DAT', 
     S            OPENED = F_OP,           EXIST  = F_EX,
     S            IOSTAT =  IO_RC,         ERR     = 15 ) 
       PRINT *,    ''OUPOUT.DAT status OPEN ', F_OP, ' et EXIST ', F_EX.
--
Cordialement.

Cchristian.
0
pingous Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
merci Cchristian! a Bientot
0
pingous Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
salut a tous,

j'ai un soucis en fortran. je sais lire et ecrire dans un fichier en utilisant la syntaxe: OPEN(unit, filenames,...). Mais en ce moment j'ai pres de 2000 fichiers de donnees que je voudrais traiter de facon simultanee car j'y effectue les meme calculs. je ne sais vraiment pas comment m'y prendre. Merci de me filer une piste si vous en avez!

cordialement
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour, sache que je ne connais pas fortran (même pas de nom)
Mais pour ton problème peut-être faudrait-il que tu ouvres tes 2000 fichiers un par un (en utilisant un fichier contenant les noms des fichiers ouverts et l'ordre dans lequel ils ont été ouverts) pour centraliser les données qui te sont utiles dans un fichier unique, faire tes calculs avec ce fichier unique (en créant éventuellement un autre fichier pour les résultats) puis écrire les résultats un par un dans tes 2000 fichiers (en utilisant le fichier contenant les noms, et celui contenant les résultats), comme ça tu auras 2 ou 3 fichiers ouverts plutôt que 2000 ! Ne pas oublier bien sûr de supprimer le fichier central à la fin du programme (surtout qu'il risque d'être assez gros)
Voilà d'un point de vue purement algorithmique ce que je peux te proposer, je ne sais cependant pas si c'est programmable en fortran, ni si ça correspond aux calculs que tu veux faire...
0
pingous Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
Bonjour

j'ai pense a ce que tu as propose. je t'en remercie deja. Mais je n'ai pas trouve un moyen de le programmer en fortan.
0
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   131 > pingous Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,
Comme te l'as écrit KX il faut recenser les noms des (2000) fichiers dans un fichier unique que tu pourras ensuite exploiter en Fortran.
Pour créer ce fichier de noms je ne vois qu'un batch (MS DOS) à condition de pouvoir identifier chacun des 2000 fichiers sur un critère commun (l'extension par exemple si elle est exclusivement spécifique à ces 2000 fichiers où bien , autre exemple, si ces fichiers se trouvent tous dans un même dossier à l'exclusion de tout autre fichier, .................)
Je pense que ce batch pourra (je n'ai encore jamais testé ce cas de figure) être activivé en début d'exécution du programme Fortran (par un ordre CALL probablement).
0