|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : juillet 2011 Messages : 1 ![]() |
Bonjour la communauté,
Je viens juste de me mettre au Fortran et il y a un problème qui me taraude l'esprit depuis. J'aimerais extraire une colonne spécifique à partir d'un fichier txt; et j'aimerais le faire pour plusieurs colonnes et sachant que mes colonnes n'ont pas nécessairement le même nombre de ligne et ce dernier n'est pas connu en avance par exple : 0 0 6.228 0 0.003 0 0.003 6.096 0.029 7.353 0.084 0.003 0.336 0.003 12.192 0.227 9.404 0.168 0.003 0.673 0.003 18.288 0.431 10.409 0.717 0.309 1.798 0.214 24.384 1.066 13.24 1.07 0.857 2.489 0.729 30.48 1.901 16.027 1.281 1.519 2.893 1.396 36.576 1.41 2.187 3.143 2.092 42.672 1.485 2.849 3.297 2.79 48.768 1.53 3.521 3.397 3.49 54.864 1.564 4.214 3.478 4.196 60.96 1.597 4.935 3.555 4.919 67.056 1.633 5.689 3.633 5.672 73.152 1.784 7.344 3.858 7.338 79.248 2.3 9.402 4.367 9.4 85.344 3.759 13.24 5.682 13.24 91.44 4.912 16.027 6.111 14.208 97.536 6.761 15.73 103.632 109.728 115.824 121.92 supposons que les données ci dessus répresentent notre fichier (voir également le fichier en pièce jointe qui contient les mêmes données)et que l'on veuille par exemple extraire la colonne 3 et la mettre dans une matrice par exemple. Quelqu'un pourrait il me donner des pistes, j'ai lu quelques suggestions sur le forum mais, je n'ai pas compris grande chose, je vous en prie de rentrer un peu dans les détails. PS: les colonnes sont séparées par des tubulations. Je vous remercie d'avance |
|
|
00
|
|
|
#2 |
![]() ![]() Jean-Marc Blanc Inscription : avril 2007 Messages : 2 837 ![]() |
Salut!
La méthode la plus simple et la plus fréquemment employée consiste à lire chaque ligne de ton fichier comme une chaîne de caractères. Ensuite, tu peux la décortiquer comme tu veux. Jean-Marc Blanc
__________________
Calcul numérique de processus industriels Formation, conseil, développement Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux) |
|
|
00
|
|
|
#3 | ||||
![]() ![]() Inscription : août 2006 Messages : 781 ![]() |
Il y a plusieurs solutions à ce genre de problème. Et quelques difficultés :
Longueur de la liste Tu ne connais pas d'avance le nombre d'éléments d'une colonne. Il n'y a pas, en Fortran, de tableaux dynamiques standard (ou librairies standards) s'étirant au fur et à mesure qu'on y ajoute des éléments. La solution commune à ce problème est l'une des suivantes :
Données séparées par des tabulations Il faut presque obligatoirement passer par un format libre (*) pour traiter simplement ce type de format. Pour avoir la donnée de la colonne n, il faut lire n données à chque ligne, et assigner la donnée n à la position « ligne » du tableau: Code :
Si tu essaies de lire en format libre n données dans une ligne contenant moins de n données, il y aura saut de ligne et continuité de lecture sur la ou les lignes suivantes, jusqu'à ce que n données aient été lues. Ce comportement est incompatible avec le fait que tu as un nombre variable de données à chaque ligne. Tu auras donc quelque chose comme : Code :
Tel que suggéré par Jean-Marc, tu dois utiliser une variable caractère intermédiaire et décoder cette variable pour connaitre le nombre d'élément qu'elle contient. Je ne me souviens plus si les tabulations sont des séparateurs de colonne standards. Au besoin, tu pourrais facilement les changer à cette étape. |
||||
|
|
00
|
|
|
#4 |
|
Futur Membre du Club
![]() Inscription : juillet 2011 Messages : 90 ![]() |
Bonjour,
Si j'ai bien compris, il n'y a pas de possibilité de lire seulement la 3e colonne ? Mon problème est que mes fichiers en input sont trèèèèèèèès longs : stocker les colonnes dans des variables prend donc un temps fou (sans vous parler de la mémoire requise ...). Or, dans mes fichiers à 3 colonnes, je n'ai besoin que de la 3e. La seule solution que j'ai trouvé est de lire chaque ligne de mon fichier unit=11 comme il suit : où A est une variable bidon. Malgré tout, cela prend du temps. Une idée pour lire directement (et uniquement) la 3e colonne ? Merci à tous ! |
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : mars 2007 Messages : 326 ![]() |
Bonjour,
Non, il n'y a pas moyen de faire autrement; surtout si les données écrites dans le fichier ne sont pas uniformément formatées. La méthode que tu utilises, lire deux variables "bidon" pour évacuer les deux premières colonnes, est adaptée. Bonne continuation. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Jean-Louis CechIngénieur systèmes et réseaux Inscription : septembre 2012 Messages : 3 ![]() |
Bonjour,
pourquoi se compliquer le vie quand il existe des fonctions toutes faites pour ça. un truc disponible sous Linux, Unix, Aix... du style cat 'nom du fichier source' | cut -d " " -f 3 > 'nom du fichier destination' marche bien. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com