|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2009 Messages : 31 ![]() |
Bonjour,
je rencontre un problème depuis un certains temps : en appliquant plusieurs fois une fonction qui renvoie normalement un réel, j'obtiens parfois la valeur NaN (Not a number) sans explications. Je stocke à chaque appel de la fonction la valeur obtenue dans un fichier text graĉe à WRITE(unit=10, file = .... Ainsi à la fin le fichier contient, en colonne, des réels, mais aussi des NaN : ça ressemble à ceci : 24323 0.45261277E-9 NaN 0.11112345E-5 NaN NaN etc.... Je souhaiterais créer une fonction qui récupère dans ce fichier uniquement les valeurs réelles (non NaN) et les stocke dans un vecteur VECTREELS. Ainsi je fait (pseudo algo) : Code :
J'ai trouvé sur le net une fonction isnan mais le problème c'est que dans le fichier NaN n'est plus vraiment un NaN mais une chaine de caractère. lors de la lecture du fichier, comment READ valeur considère valeur quand il met NaN dans valeur, sachant que valeur doit etre de type réel ? C'est à dir, quand je fais : READ(10,*) valeur dans le fichier, si il rencontre NaN, quelle valeur met-il dans valeur de type réel? J'ai cherché des heures sans succès pour récupérer uniquement des réels dans un fichiers. J'ai vu des fonctions comme transfer, ieor mais je comprends pas bien. En fait je voudrais afficher les données binaires de valeur apres chaque read pour voir comment est représenter le NaN en binaire pour pouvoir comparer cette données binaires avec les données binaires des réels. Plus généralement comment faire pour récupérer des données d'un type donné dans un fichier? par exemple récupérer uniquement les entièrs présents, uniquement les réels, ... ? Merci d'avance si vous trouvez ce difficile problème. |
||
|
|
00
|
|
|
#2 | |||||||
![]() ![]() Inscription : août 2006 Messages : 781 ![]() |
Citation:
Concrètement, ton programme doit être modifié comme suit : Code :
Code :
|
|||||||
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2009 Messages : 31 ![]() |
Bonjour
merci pour votre aide mais aucune des 2 routines ne fonctionnent la première me renvoie une erreur à la ligne read(Chaine,*) vectreels(i) pourtant j'ai bien déclaré Chaine en CHARACTER et vectreels en vecteur de réels... la deuxieme renvoie les NaN quand je fais PRINT vectreels Pourriez-vous tester ces routines stp ? |
|
|
00
|
|
|
#4 | ||
|
Membre habitué
![]() Inscription : mai 2010 Messages : 111 ![]() |
Salut,
Cette version-ci du programme marche (je viens de la tester) Code :
En espérant t'avoir aidé, Marlan |
||
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2009 Messages : 31 ![]() |
Bonjour,
tout d'abord merci pour votre code (c'était quand meme compliqué avec les trim et adjustl). Si maintenant le fichier contient des mots quelconques à la place de "NaN", est-il possible de récupérer uniquement les réels? En fait, je voudrais récupérer les éléments d'un type donné dans le fichier texte. (ici les réels, pas les chaînes de caractères). Y a-t-il un moyen de connaître le type d'un élément sur chaque ligne du fichier? (évidemment dans le cas ou les types ne sont pas mélangés, avec à la fois un réel et un mot sur la même ligne) |
|
|
00
|
|
|
#6 | |||||
|
Membre éclairé
![]() Inscription : mars 2007 Messages : 326 ![]() |
Bonjour,
Citation:
En repartant de l'exemple de Marlan, au lieu de: Code :
Code :
|
|||||
|
|
00
|
|
|
#7 | ||
|
Membre habitué
![]() Inscription : mai 2010 Messages : 111 ![]() |
Salut,
Je t'ai bidouillé un programme qui lit : 1. Le nombre de la ligne, si la ligne ne contient qu'un nombre (ie : il ne stocke pas les lignes contenant uniquement des character) 2. Si la ligne contient des character et un nombre ensuite, il lit le nombre mais l'unique condition que le séparateur entre la chaine de character et le nombre d'une ligne à une autre soit toujours de la même taille. Le fichier que j'ai utilisé ici est le suivant : 24323 0.45261277E-9 NaNdvfvdfvd 10 0.11112345E-5 NaN NaN 10 sdqkqdsd 10 Le programme en lui même est : Code :
Marlan |
||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2009 Messages : 31 ![]() |
Wow on peut dire que vous avez été très efficace à résoudre mon problème, je suis très satisfait de cette réponse et vous en remercie.
Donc maintenant je sais qu'il est possible de distinguer les types réels/ non réels dans un fichier, mais avouez qu'il fallait vraiment creuser dans les fonctions Fortran (utilisation de iostat en particulier) pour deviner ce code pas évident a priori. dommage qu'il n'existe pas tout simplement de fonction "typeof(x)" pour connaître le type de x dans un fichier (réel seul, chaine de characters uniquement, entier uniquement, etc...). |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : mai 2010 Messages : 111 ![]() |
^^
En effet, la manipulation des fichiers en FORTRAN peut être assez délicate, surtout lorsque l'on a pas connaissance de l'ordre dans lequel ceux ci sont écris. N'oublies pas de cliquer sur l'onglet résolu en bas de page dès fois que quelqu'un ait le même problème à l'avenir. Bonne journée, Marlan |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com