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 -
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
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:
- Ecrire les resultats dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
4 réponses
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 ?
Afin de mieux cerner le problème, il serait nécessaire d'ajouter IOSTAT= et ERR= et de voir le résultat.
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
Bonjour,
RECTIFICATIF :
Il manque IOSTAT= IO_RC sur l'ordre INQUIRE :
Cordialement.
Cchristian.
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.
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
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
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...
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...
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).
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).
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!