Problème de lecture de fichier avec JNA

Fermé
stam971 Messages postés 2 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 1 août 2014 - Modifié par stam971 le 1/08/2014 à 15:02
stam971 Messages postés 2 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 1 août 2014 - 1 août 2014 à 17:40
Bonjour,

Je n'arrive pas à lire des nombres décimaux dans un fichier texte en utilisant JNA

J'ai codé une subroutine simple qui lit à l'aide de la fonction READ de Fortran un nombre décimal dans un fichier texte.

Cette subroutine est appelée dans mon programme Java via l'utilisation de la bibliothèque JNA.

Seulement, lors de la lecture du fichier, seule la partie entière du nombre est récupérée. Le fichier lu contient une seule et unique valeur '2.3'. Lorsque je fais un WRITE de la valeur lue par mon READ j'obtiens : '2.0000000000000'.
exemple :
2.200 => 2.000000000000000
0.12 => 0.000000000000000
12.023 => 12.000000000000000
100000.0182 => 100000.000000000000000

J'utilise Netbeans 8.0, Fortran 77, Java 7, Jna-4.1.0 et gfortan.

Ma classe principale :
package Appli;
 
public class Appli {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
         
        // Appel a la subroutine lecture via la librairie dynamique LECT
        MamaInterface.LECT.lecture();
         
    }
}


L'interface entre la librairie libLect.so et mon programme java :
package Appli;
 
import com.sun.jna.Library;
import com.sun.jna.Native;
 
/**
 * Interface.
 */
public interface LectInterface extends Library {
     
    // Bibliotheque dynamique.
    public final static LectInterface LECT = (LectInterface) Native.loadLibrary("libLect.so", LectInterface.class);
     
    /**
     * Fonction LECTURE.
     *
     */
    public double lecture();
}


La subroutine LECTURE.f (seule subroutine de la librairie dynamique) :
      SUBROUTINE LECTURE ()
       
C_LOCAL    
      DOUBLE PRECISION VALDOUBLE
       
      INTEGER IFILE
      PARAMETER(IFILE=1)
       
      CH1 = '/home/Fortran/fort.txt'
       
      WRITE(*,*)'DEBUT LECTURE'
       
      OPEN(UNIT=1,FILE=CH1)
      READ(IFILE,*) VALDOUBLE
      WRITE(*,*)VALDOUBLE
       
      WRITE(*,*)'FIN LECTURE'
 
      END


Pour compiler mon code Fortran j'utilise les commandes suivantes :

gfortran -fno-underscoring -fPIC -c -g -o LECTURE.o LECTURE.f

Puis pour générer la bibliothèque dynamique :

gfortran -shared -o libLect.so LECTURE.o

Le fichier lu :

2.3

Le retour de l'exécution (dans NetBeans) :

run:
DEBUT LECTURE
2.000000000000000
FIN LECTURE


Si quelqu'un a une idée, une suggestion, toute aide est la bienvenue.
Merci d'avance pour vos réponses.
A voir également:

1 réponse

stam971 Messages postés 2 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 1 août 2014
1 août 2014 à 17:40
J'ai réalisé quelques tests avec deux autres compilateurs : ifort d'INTEL et pgf90 de la gamme PGI.

Si le résultat obtenu avec pgf90 n'est pas plus satisfaisant, il s'avère que la lecture s'effectue correctement avec ifort.

Compilation : ifort -c -fPIC LECTURE.f

Génération de la librairie : ifort -shared -o libLect.so LECTURE.o

Résultat (valeur lue) : 2.3

J'ai également retenté une compilation avec gfortran et les mêmes options de compilation que pour ifort. La valeur lue reste erronée.

N'y aurait-il pas une option de compilation à ajouter avec gfortran ? Merci.
0