Problème de lecture de fichier avec JNA
stam971
Messages postés
2
Statut
Membre
-
stam971 Messages postés 2 Statut Membre -
stam971 Messages postés 2 Statut Membre -
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 :
L'interface entre la librairie libLect.so et mon programme java :
La subroutine LECTURE.f (seule subroutine de la librairie dynamique) :
Pour compiler mon code Fortran j'utilise les commandes suivantes :
Puis pour générer la bibliothèque dynamique :
Le fichier lu :
Le retour de l'exécution (dans NetBeans) :
Si quelqu'un a une idée, une suggestion, toute aide est la bienvenue.
Merci d'avance pour vos réponses.
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:
- Problème de lecture de fichier avec JNA
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
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.
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.