deniger
2002-12-11
Description des classes permettent de lire un fichier fortran binaire ou ascii.
Lecture d'un fichier fortran
Fichier binaire
Pour lire ce type de fichier, vous pouvez utiliser la classe
dodico/fortran/FortranBinaryInputStream .
Ce type de fichier pose plusieurs problèmes. Si le fichier binaire
a été généré par une machine intel (X86 ), les nombres sont stockés sous
le format "little indian". Par contre, avec une machine de type "sparc " le format
"big endian" est utilisé. Il est possible de spécifier le type de machine
dans le constructeur de FortranBinaryInputStream .
Il existe plusieurs mode d'enregistrement en fortran : le mode séquentiel
et le mode direct. Pour le mode direct, il faut préciser la longueur des
enregistrements (setRecordLength(int _l) ). Pour le mode
séquentiel, il faut utiliser la methode readRecord() pour chaque
WRITE effectué lors de l'écriture du fichier binaire.
Exemples
Ecriture du fichier fortran en acces direct au format big indien
(sparc)
Nous supposerons que la taille des enregistrements est de 30 .
Cela correspond à la commande en fortran suivante:
open (unit=10,file='fichier.bin',access='direct',recl=30,form='unformatted')
read (unit=10) <i>,<f>,<d>,<s>
Le code java correspondant:
FortranBinaryInputStream in=
newFortranBinaryInputStream(new FileInputStream("fichier.bin"),false,"sparc");
in.setRecordLength(30);
int i=in.readInteger();
float f=in.readReal();
double d=in.readDoublePrecision();
String s=in.readCharacter(s.length());
in.close();
Grâce à ces commandes, un entier (32 bits), un réel simple (32 bits),
un réel double précision (64 bits) et un caractère ( s.length
bits) ont été lus.
Ecriture du fichier fortran en accès direct au format little indien
(intel ou X86)
Le code fortran:
open (unit=10,file='fichier.bin',access='sequentiel',form='unformatted')
read (unit=10) <i>,<f>,<d>,<s>
Le code java
FortranBinaryInputStream in= newFortranBinaryInputStream(new FileInputStream("fichier.bin"),true,"X86");
in.readRecord();
int i=in.readInteger();
float f=in.readReal();
in.readRecord();
double d=in.readDoublePrecision();
String s=in.readCharacter(s.length());
in.close();
La commande in.readRecord()
doit être insérée pour chaque commande fortran WRITE .
Fichier ascii
La classe dodico/fortran/FortranReader fournit les outils
nécessaires pour lire un fichier généré par du code fortran ( ou tout autre
fichier texte). Les fichiers formatés (largeurs de
colonnes fixes) et libres sont gérés.
Voici une partie de code permettant de lire une ligne d'un fichier fortran formaté
( largeur des colonnes = 5 ). Le résultat est stocké dans une
String .
file = newFortranReader(new FileReader(_file));
fmt = new int[] { 5 };
file.readFields(fmt);
String s=file.stringField(0);
Pour lire un fichier non formaté, il suffit d'utiliser la méthode précédente
sans paramètres (file.readFields(); ).
|