J'essaye d'utiliser fortran pour écrire un fichier délimité par des virgules pour l'importer dans un autre paquet commercial. Le problème est que j'ai un nombre inconnu de colonnes de données. Ma sortie doit ressembler à ceci:Instruction au format avec des colonnes inconnues
a_string,a_float,a_different_float,float_array_elem1,float_array_elem2,...,float_array_elemn
qui conduirait à quelque chose qui pourrait ressembler à ceci:
L1080,546876.23,4325678.21,300.2,150.125,...,0.125
L1090,563245.1,2356345.21,27.1245,...,0.00983
J'ai trois questions. Premièrement, je préférerais que les éléments soient étroitement groupés (largeur de colonne variable), deux, je ne sais pas comment définir un nombre variable d'éléments de tableau dans l'instruction de format, et trois, les éléments de tableau peuvent couvrir une large gamme ... peut-être 12 ordres de grandeur. Le code suivant fait conceptuellement ce que je veux, mais la variable « n » et l'absence de définition de la colonne de largeur renvoie une erreur (bien sûr):
WRITE(50,900) linenames(ii),loc(ii,1:2),recon(ii,1:n)
900 FORMAT(A,',',F,',',F,n(',',F))
(Je dois souligner que n est fixé à l'exécution .) L'instruction write fait ce que je veux quand je fais WRITE (50, *), sauf qu'elle est délimitée par la largeur.
Je pense que ce fil a presque répondu à ma question, mais j'ai été assez confus: SO. En ce moment j'ai un script shell avec awk corrigeant le problème, mais cette solution est ... inélégante. Je pourrais faire quelques manipulations pour faire de la sortie une chaîne, et ensuite l'écrire, mais je préférerais éviter cette option si possible. Je le fais dans Fortran 90 mais j'aime essayer de garder mon code aussi rétrocompatible que possible.
Je devrais également noter que la raison pour laquelle je voudrais des colonnes serrées est double: une, qui est l'entrée désirée au prochain programme, et deux, taille. Il peut y avoir plusieurs millions de lignes dans le fichier de sortie résultant, avec plusieurs dizaines de colonnes. Les espaces font la différence! Merci –