[Fortran90] lecture de données

Fermé
jdeha Messages postés 3 Date d'inscription vendredi 4 mars 2011 Statut Membre Dernière intervention 7 mars 2011 - 4 mars 2011 à 11:13
jdeha Messages postés 3 Date d'inscription vendredi 4 mars 2011 Statut Membre Dernière intervention 7 mars 2011 - 7 mars 2011 à 21:21
Bonjour,

Je travaille actuellement (en groupe) sur un projet multidisciplinaire dans le cadre de ma dernière année d'études à l'université de Namur. Il nous est demandé de coder un générateur de population synthétique et nous avons choisi de le faire en Fortran90, ce qui nous amène à notre petit soucis : nous sommes censés récupérer les données de la population dans un fichier *.txt, chaque ligne fournissant les infos propres à uné famille. Cependant, le nombre de données à chaque ligne dépend du nombre de membres dans la famille et est donc variable...

Comment faire pour récupérer ces données ligne par ligne? Il est évident que boucler bêtement sur les éléments n'est pas la bonne solution puique cela nous amènerait régulièrement soit à ne pas récupérer toutes les données d'une ligne, soit à en récupérer trop, i.e. à récupérer des données de la ligne suivante.

Existe-t-il un équivalent du "End of File" (eof) pour les lignes? Quelque chose du genre "dès qu'on arrive au bout de la ligne, on arrête de stocker les données et on passe au vecteur suivant".

Merci d'avance,

J.D.

3 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 mars 2011 à 12:48
Salut.
Pour commencer : Fortran est un mauvais choix. Qui à apprendre à programmer autant le faire en commençant par un langage pourri.
Bien sur qu'il y a l'équivalent du EOF pour les lignes, sinon comment les éditeurs sauraient que le texte doit aller à la ligne suivante. La fin de ligne est indiqué par le code ASCII 10 (en décimal), et par les caractères 10 ET 13 sous windows.
Bon courage pour réussir à faire ça avec les fonctions minables du fortran.
Ce que j'essairai de faire, c'est de stocker toute la ligne dans une seule variable string (un read ferait l'affaire ?).
Et ensuite de casser la chaine en différents membres. En tout cas bonne chance.

Il y aurait plus simple, avec une boucle si le nombre de membre est directement stocker dans le fichier.
0
jdeha Messages postés 3 Date d'inscription vendredi 4 mars 2011 Statut Membre Dernière intervention 7 mars 2011
4 mars 2011 à 13:20
Merci pour la réponse.

Nous avions globalement le choix entre Fortran et C. Les deux langages sont similaires et ni l'un ni l'autre n'est vraiment adapté pour la lecture de données.

Je suis conscient qu'il existe des codes signalant la fin de la ligne, mais ce n'est malheureusement en rien comparable à un bête "EOF" qu'on peut gentiment placer dans une condition logique. Nous avons essayé de jouer avec les options "ADVANCE=" et "IOSTAT=" mais sans succès.

Et bien entendu, le nombre de membres n'est pas stocké dans le fichier. Ce serait dommage de nous simplifier la vie... ;-)

Nous allons essayer de trouver une autre solution, éventuellement repasser en C (mais je pense qu'il n'existe pas non plus de fonction "end-of-line")...


P.S.: je n'ai pas très bien compris l'histoire d'"apprendre à programmer" - la phrase n'était pas fort claire. Cela fait 5 ans que nous programmons en C, Fortran, MATLAB, et éventuellement en Java et C++, donc il n'est pas vraiment question d'apprendre à programmer... :-)
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 mars 2011 à 14:00
désolé pour le apprendre. Mais le C est bien plus puissant et modulaire que le fortran. Si vous connaissez les deux langages, je ne comprends même pas comment faire un tel choix !
en C, le caractère de fin de ligne est '\n', pour lire une ligne, il y a la fonction fgets http://www.manpagez.com/man/3/fgets/ il n'y a ensuite plus qu'à traiter la variable lu. Des fonctions qui pourront être utiles : sscanf sprintf qui permettent pas mal de simplification de code.
Si vous avez besoin d'aide ou de précisions, n'hésitez pas.

Si vous avez déjà un bout de code en fortran, il est possible de mixer C et Fortran dans un même programme.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 mars 2011 à 14:10
quelques morceaux utiles https://c.developpez.com/telecharger/
0
jdeha Messages postés 3 Date d'inscription vendredi 4 mars 2011 Statut Membre Dernière intervention 7 mars 2011
7 mars 2011 à 21:21
Merci beaucoup, on va jeter un oeil à tout ça!
0