deniger
2002-12-11
Description des classes permettent de lire un fichier fortran binaire ou ascii.

dodicoLecture 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();).