bonjour,
je souhaite écrire une chaine de caracteres au clavier, puis
en connaitre sa longueur avec la fonction len et enfin, une fois que je connais la longueur, je voudrais découper la chaine de caracteres un à un.
comment puis-je faire?
merci
bonjour,
je souhaite écrire une chaine de caracteres au clavier, puis
en connaitre sa longueur avec la fonction len et enfin, une fois que je connais la longueur, je voudrais découper la chaine de caracteres un à un.
comment puis-je faire?
merci
Il est important de comprendre qu'en Fortran, il n'est généralement pas possible de connaitre la longueur d'une chaîne de caractère. Quand on assigne une chaîne à une variable, la chaîne est tronquée ou complétée par des espaces de façon à occuper exactement la longueur déclarée de la variable.
Les fonctions de manipulation intéressantes pour ta question sont :
- len(Var) te donnera la longueur physique de la variable et non la longueur du contenu.
- len_trim(Var) te donnera la longueur du contenu, excluant les espaces à la fin.
Par exemple :
Si la chaîne en entrée contenait des espaces à la fin, il est donc difficile de le savoir. Il est cependant possible, en Fortran 95, de lire un caractère à la fois avec la clause « advance="no" » dans le read.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 character (80) Var Var = '1234567890 ' ! 13 carctères, mais Var contient 10 digits suivi de 70 espaces. print *, len(Var) ! affichera 80 print *, len_trim(Var) ! affichera 10
Pour obtenir une sous-chaîne, la syntaxe est Var(Début:Fin). Pour avoir un caractère à la fois, il faut donc faire Var(Pos: Pos).
merci^pour ta reponse, je pense que ça va m'aider
Grace à tes conseils j'arrive à determiner la longueur de la chaine de caractères. Mais, comment puis-je faire pour avoir acces à chacun de ces caracteres?
Je prend un petit exemple:
si la chaine de caractere est : hello
comment puis-je faire pour que : lettre(1)=h ; lettre(2)=e ; lettre(3)=l ; ...?
merci
salut,
Code : Sélectionner tout - Visualiser dans une fenêtre à part lettre(1:1)='h' ; lettre(2:2)='e' ; lettre(3:3)='l' ; ...
salut,
merci pour ta réponse.
Mais, je me suis mal exprimé.
j'ai une chaine de caractères aléatoire dont je connais la longueur.
Comment puis-je faire pour connaitre la 1ere, 2nde, 3eme,... lettre de cette chaine?
et ensuite je voudrais, si le mot est "hello", qu'il me renvoit "h" pour lettre(1) ; "e" pour la seconde valeur du tableau lettre(i), et ainsi de suite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 character*5 mot integer lettre(5) ! tableau contenant les cinq lettres du mot write(*,*)'entrer mot de 5 caratères' read(*,*)mot
Mes cours de fortran sont loint et je rame un peu.
Merci
je n'ai pas testé, mais il me semble qu'il suffit de faire l'inverse de ce que t'a donné afrancisco.
ça me semblerai logique...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 lettre(1)=mot(1:1) lettre(2)=mot(2:2) etc...
un grand merci, c'est ça!!! Je viens de tester et ça fonctionne!
c'est encore moi
J'ai encore un problème.
si le mot est : "le chat",
il ne croit que le texte s'arrete au premier espace. Si bien que mot(3:3); mot(4:4),...,mot(6:6) ne renvoient pas les lettre concernées mais un blanc.
Comment puis-je faire pour que l'ensemble des 2 mots soient pris en compte?
Merci encore
Bonjour,
C'est une affaire de format de lecture. Si tu utilises quelque chose comme
donc sans préciser le format, alors les règles par défaut s'appliquent, et en particulier le fait qu'un espace est un séparateur. Dans le cas où l'utilisateur entre 'le chat', phrase contiendra seulement 'le', comme tu l'as constaté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 read(*,*) phrase
Pour obtenir le comportement que tu souhaites, il faut préciser le format. Par exemple avec:
on récupère tous les caractères saisis (espaces compris), c.-à.d tous les caractères (ici dans la limite des 50 premiers) jusqu'à rencontrer la marque de fin de ligne (le retour chariot).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 character*50 phrase read(*,fmt='(a50')) phrase
il me semble quand tu fais un "read", un espace ou un retour chariot sont équivalents (en tout cas, quand je lis plusieurs variables dans la même instruction read, je peux utiliser indifféremment un espace ou un retour chariot pour passer à la variable suivante).
Du coup, lorsque tu écrit LE CHAT, il considère que la première variable à entrer est LE et que CHAT est une autre variable qui n'est pas lue puisque tu lis une unique variable.
tu devrai plutot utiliser qq chose comme ça (a verifier parceque je fais çà de tête)
tu impose donc un format tel que la variable lue doit avoir 5 caractères (incluant les espaces il me semble).
Code : Sélectionner tout - Visualiser dans une fenêtre à part read('(A5)',*)mot
Sinon, tu pourrait faire qq chose comme ça :
,
Code : Sélectionner tout - Visualiser dans une fenêtre à part read('(5A)',*)(lettre(i),i=1,5)
cela signifie que tu lit 5 chaines de 1 caractères, et du coup tu peux directement les mettre dans le tableau lettre() (encore une fois c'est fait de tête, donc a vérifier...)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager