Importation de matrice sous fortran
Oscar
-
amandine -
amandine -
Voilà, je sais ouvrir des fichiers de données ligne ou colonne sous fortran mais je n'arrive pas à lire des matrices.
Par exemple, je suis sous matlab, j'exporte un fichier truc.txt qui contient une matrice 3x3. Je ne sais récuprérer qu'une ligne ou une colonne.
Si quelqu'un sait comment il faut faire (à part transformer ma matrice en succession de colonnes au format 1x9 par exemple), pourrait-il m'envoyer l'instruction à taper sous fortran...Merci d'avance!!!
Par exemple, je suis sous matlab, j'exporte un fichier truc.txt qui contient une matrice 3x3. Je ne sais récuprérer qu'une ligne ou une colonne.
Si quelqu'un sait comment il faut faire (à part transformer ma matrice en succession de colonnes au format 1x9 par exemple), pourrait-il m'envoyer l'instruction à taper sous fortran...Merci d'avance!!!
A voir également:
- Importation de matrice sous fortran
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Echec d'importation story instagram ✓ - Forum Samsung
- Fortran 90 download - Forum Programmation
- Les formalités d’importation sont en cours sur votre envoi. - Forum Consommation & Internet
- Telecharger le logiciel du fortran 90 - Forum Programmation
6 réponses
DIMENSION MATR(3,3)
IUNIT = 10
OPEN(IUNIT,NAME='truc.txt',ERR=label1)
C --- Remplissage par ligne (1,1), (1,2), (1,3), (2,1), (2,2), ...
READ(IUNIT,*[,ERR=label]) (((MATR(I,J),J=1,3),I=1,3)
où "*" = format automatique (valeurs séparées par un espace au moins,
sinon format en "Iw","Fw.d","Ew.d" avec facteur de multiplication, comme indiqué dans tout bon manuel
IUNIT = 10
OPEN(IUNIT,NAME='truc.txt',ERR=label1)
C --- Remplissage par ligne (1,1), (1,2), (1,3), (2,1), (2,2), ...
READ(IUNIT,*[,ERR=label]) (((MATR(I,J),J=1,3),I=1,3)
où "*" = format automatique (valeurs séparées par un espace au moins,
sinon format en "Iw","Fw.d","Ew.d" avec facteur de multiplication, comme indiqué dans tout bon manuel
osacr
Merci encore, nul doute que cette astuce va me permettre de gagner un temps précieux!
Bonjour,
Je débute en fortran 77 et je rencontre quelques problèmes. Je souhaite écrire un matrice de zéro de plusieurs lignes et de 32 colonnes dans un fichier texte mais je n'y arrive pas. J'ai essayé plusieurs techniques mais rien y fait.
J'ai d'abors écrit:
parameter (NBLIG=10,NBCOL=32)
real*8 matrice(NBLIG,NBCOL)
IL=0
IC=0
open(unit=1,file='matrice.dat',status='new')
6 write(1,2) (matrice(IL,1:NBCOL))
2 format(32(x,F8.5))
IL=IL+1
IF(IL.EQ.NBLIG) GOTO 3
GOTO 6
3 close (unit=1)
end
mais j'ai ce message d'erreur "Output statement overflows record". J'ai essayé d'utilisé iunit mais sans plus de succès.
Si quelqu'un sait comment je peux faire, pourrait-il m'envoyer quelque éléments de réponse....
merci d'avance
Je débute en fortran 77 et je rencontre quelques problèmes. Je souhaite écrire un matrice de zéro de plusieurs lignes et de 32 colonnes dans un fichier texte mais je n'y arrive pas. J'ai essayé plusieurs techniques mais rien y fait.
J'ai d'abors écrit:
parameter (NBLIG=10,NBCOL=32)
real*8 matrice(NBLIG,NBCOL)
IL=0
IC=0
open(unit=1,file='matrice.dat',status='new')
6 write(1,2) (matrice(IL,1:NBCOL))
2 format(32(x,F8.5))
IL=IL+1
IF(IL.EQ.NBLIG) GOTO 3
GOTO 6
3 close (unit=1)
end
mais j'ai ce message d'erreur "Output statement overflows record". J'ai essayé d'utilisé iunit mais sans plus de succès.
Si quelqu'un sait comment je peux faire, pourrait-il m'envoyer quelque éléments de réponse....
merci d'avance
En Fortran, par défaut, les tableaux ou les matrices ont des indices commençant à 1.
Dans tes ordres d'écriture, tu utilises l'indice IL, initialisé à 0, ce qui cherche à accéder à une zone mémoire hors de la matrice. Si cette zone est protégée, il appaîtra un message du style "access violation". Sinon, le résultat sera n'importe quoi, mais sans rien qui le signale !
Chaque enregistrement en sortie occupe 32 x 9 octets soit 288 octets. Il faut sans doute préciser une taille d'enregistrement logique dans l'ordre OPEN (vérifier dans le manuel, si cette taille n'est pas limitée à 256).
Voilà un peu comment j'aurais écrit ce bout de code (tout en majuscules, ajout de commentaires, alignement et/ou indentation, ...) ... bien que n'ayant pas touché au Fortran depuis plus de 10 ans :
NB : le forum permet de "conserver la mise en forme du texte sélectionné".
Dans tes ordres d'écriture, tu utilises l'indice IL, initialisé à 0, ce qui cherche à accéder à une zone mémoire hors de la matrice. Si cette zone est protégée, il appaîtra un message du style "access violation". Sinon, le résultat sera n'importe quoi, mais sans rien qui le signale !
Chaque enregistrement en sortie occupe 32 x 9 octets soit 288 octets. Il faut sans doute préciser une taille d'enregistrement logique dans l'ordre OPEN (vérifier dans le manuel, si cette taille n'est pas limitée à 256).
Voilà un peu comment j'aurais écrit ce bout de code (tout en majuscules, ajout de commentaires, alignement et/ou indentation, ...) ... bien que n'ayant pas touché au Fortran depuis plus de 10 ans :
PARAMETER (NBLIG=10,NBCOL=32)
REAL*8 MATRICE(NBLIG,NBCOL)
C --- Remplissage de la matrice
C (ne pas compter sur le chargement du programme par la machine)
DO 20 IL = 1, NBLIGN
DO 10 IC = 1, NBCOL
MATRICE(IL,IC) = 0.
10 CONTINUE
20 CONTINUE
C --- Sauvegarde sur fichier :
OPEN(UNIT=1,FILE='matrice.dat',STATUS='new')
C DO 100 IL = 1,NBLIGN
C WRITE(1,2) (MATRICE(IL,IC),IC=1,NBCOL))
C 100 CONTINUE
C --- la même chose que ci-dessus en plus compact :
WRITE(1,2) ((MATRICE(IL,IC),IC=1,NBCOL),IL=1,NBLIG)
CLOSE (UNIT=1)
2 FORMAT(32(X,F8.5))
END
NB : le forum permet de "conserver la mise en forme du texte sélectionné".
Merci pour ces informations et le code que tu m'a fourni est très bien mais il ne résout pas le problème car j'ai le même message d'erreur. Comme tu l'as dit, c'est la taille des données en sortie qui pose un problème. Malheureusement, je suis obligé d'utiliser ce format de sortie. Sais-tu si il existe un moyen d'augmenter la taille d'enregistrement logique dans l'ordre OPEN?
Merci d'avance
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si le langage est à peu près universel, il n'en est pas de même de l'implémentation des fichiers et de leurs fonctions d'accès depuis un langage évolué (non visibles du programmeur), qui dépendent de chaque machine ("machine dependant").
Il faut donc consulter le "Programmer's guide" correspondant, et notamment les chapitres récapitulant les messages d'erreur.
A défaut d'en avoir sous la main, on peut en trouver sur Internet, avec les mots-clés "programmer's guide" Fortran {type-de-machine}...
Exemple de paramètres de la directive "OPEN" :
où
* RECL permet d'introduire la taille de l'enregistrement.
* FORM permet d'indiquer que le fichier contiendra de l'ASCII (ou autre), sinon ce sera du "binaire" (= image mémoire des nombres). double précision)
Il faut donc consulter le "Programmer's guide" correspondant, et notamment les chapitres récapitulant les messages d'erreur.
A défaut d'en avoir sous la main, on peut en trouver sur Internet, avec les mots-clés "programmer's guide" Fortran {type-de-machine}...
Exemple de paramètres de la directive "OPEN" :
OPEN( 21, ..., RECL={en octets}, FORM='FORMATTED')
où
* RECL permet d'introduire la taille de l'enregistrement.
* FORM permet d'indiquer que le fichier contiendra de l'ASCII (ou autre), sinon ce sera du "binaire" (= image mémoire des nombres). double précision)