[Fortran 90] Longueur de chaine dans un format... Help plz

Longueur de chaine dans un format... Help plz [Fortran 90] - Divers - Programmation

Marsh Posté le 28-10-2003 à 13:38:54    

Je veux definir un format d'ecriture. Dans ce format je veux inserer une chaine de caractere dont la taille peut varier...
 
Je voudrais que l'affichage de la chaine s'adapte à la longueur de celle ci:
 
print '("Date de stage :",1x,"du",1x,I2,1X,"au",1x,I2,1x,A10,1X,I4)',j1,j2,mois,a
 
Ici le A10 permet l'écriture d'une chaine de 10 caracteres. Je peux obtenir la longueur de la chaine mais je n'arrive pas à l'integer dans le format...  :(  
 
 
m = len_trim(mois)
 
print '("Date de stage :",1x,"du",1x,I2,1X,"au",1x,I2,1x,Am,1X,I4)',j1,j2,mois,a
 
Ca par exemple ne marche pas..
Help plz  :jap:  

Reply

Marsh Posté le 28-10-2003 à 13:38:54   

Reply

Marsh Posté le 28-10-2003 à 15:35:32    

Vieux souvenir le Fortran...
Si pas de solution, faudrait avoir autant de formats que de cas
,"au",1x,I2,1x,A7,1X,I4)'
,"au",1x,I2,1x,A8,1X,I4)'
,"au",1x,I2,1x,A9,1X,I4)'
et faire branchement selon
 
ou essayer, sais pas si ça marcherait, comme en C, faire une chaîne format
sprintf(szChne, "%f bidule %u", ...);
on peut le remplacer par  
sprintf(szChne, szChneFormat, ...); avec szChneFormat une chaîne de caractères qui contiendrait ici {"%f bidule %u"}.
Si la fonction l'admet, c'est gagné.
 
NB : des champs alignés (pour le mois), c'est pas mal non plus, ça fait "ancienne mode".

Reply

Marsh Posté le 28-10-2003 à 17:15:15    

CARBON_14 a écrit :

Vieux souvenir le Fortran...
Si pas de solution, faudrait avoir autant de formats que de cas
,"au",1x,I2,1x,A7,1X,I4)'
,"au",1x,I2,1x,A8,1X,I4)'
,"au",1x,I2,1x,A9,1X,I4)'
et faire branchement selon
 
ou essayer, sais pas si ça marcherait, comme en C, faire une chaîne format
sprintf(szChne, "%f bidule %u", ...);
on peut le remplacer par  
sprintf(szChne, szChneFormat, ...); avec szChneFormat une chaîne de caractères qui contiendrait ici {"%f bidule %u"}.
Si la fonction l'admet, c'est gagné.
 
NB : des champs alignés (pour le mois), c'est pas mal non plus, ça fait "ancienne mode".


 
Bon j'avais bien pensé à la première solution mais bon elle est un peu lourd qd même...
 
Pour la deuxième je ne comprend pas vriament bien ce que tu veux faire (faut m'escuser, newbee inside  ;)  )
 
Tu veux remplacer le "A10" par exemple par une chaine de caractere qui contiendrais A10 ??
 
Enfin bon j'ai bien l'impression qu'il ne va pas accepter autre chose que "A puis un entier".


Message édité par Coockie le 28-10-2003 à 17:15:37
Reply

Marsh Posté le 28-10-2003 à 22:58:00    

C'est moins souple que le C alors...
S'il n'accepte PAS une chaîne en argument, c'est cuit.... Ca serait souple comme méthode.
En créant une chaîne "A9", il n'en veut pas à la place de A9 dans la définition du format ? On peut rêver....
Mes souvenirs sont vieux, vieux, ...(1978-1980)... Fortran 77 je crois (?) sur PDP7 DIGITAL puis UNIVAC.
 
EDIT : sinon, y a pas moyen (j'ai oublié) de concaténer chaînes, les fixes et la variable ?


Message édité par Carbon_14 le 28-10-2003 à 23:27:10
Reply

Marsh Posté le 29-10-2003 à 11:39:45    

CARBON_14 a écrit :

C'est moins souple que le C alors...
S'il n'accepte PAS une chaîne en argument, c'est cuit.... Ca serait souple comme méthode.
En créant une chaîne "A9", il n'en veut pas à la place de A9 dans la définition du format ? On peut rêver....
Mes souvenirs sont vieux, vieux, ...(1978-1980)... Fortran 77 je crois (?) sur PDP7 DIGITAL puis UNIVAC.
 
EDIT : sinon, y a pas moyen (j'ai oublié) de concaténer chaînes, les fixes et la variable ?


 
Bien en attendant que j'essaye de comprendre ton histoire de concaténation là voilà comment je me suis débrouillé:
C'est pas forcement bau et court mais bon ca marche.
 
Le but était de redeclarer des chaines avec la bonne taille, donc j'ai fait la procedure suivante:
 

Code :
  1. program ecrire
  2. implicit none
  3. integer :: i,j,a,m,taille
  4. character(len=9) :: mois
  5. read*,i,j,a,mois
  6. taille = len_trim(mois)
  7. call bonne_taille(i,j,a,taille,mois)
  8. end
  9. subroutine bonne_taille (i,j,a,taille,mois)
  10. implicit none
  11. integer, intent(in) :: taille,i,j,a
  12. character(len=9), intent(in) :: mois
  13. character(len=taille) :: bon_mois
  14. bon_mois = mois
  15. print '("Date de stage :",1x,"du",1x,I2,1X,"au",1x,I2,1x,A,1X,I4)',i,j,bon_mois,a
  16. end

Reply

Marsh Posté le 29-10-2003 à 12:43:14    

C'est la chaîne qui est ajustée, et non le format A qui est paramétré...
Pas mal.
 
NB : le Fortran a drolement évolué en syntaxe et possibilités. Le mien, on le perforait encore (j'ai gardé des cartes (obsolètes) !).

Reply

Marsh Posté le 29-10-2003 à 13:46:03    

CARBON_14 a écrit :

C'est la chaîne qui est ajustée, et non le format A qui est paramétré...
Pas mal.
 
NB : le Fortran a drolement évolué en syntaxe et possibilités. Le mien, on le perforait encore (j'ai gardé des cartes (obsolètes) !).


 
Vi apparament c'est un tres vieux langage... Moi je travail sur le 90 mais il existe le 95 et même une version 2000 du langage je crois...
 
Enfin bon merci pour l'aide  ;)


Message édité par Coockie le 29-10-2003 à 13:46:22
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed