IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Afficher un caractère d'un string


Sujet :

Ada

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut Afficher un caractère d'un string
    Bonjour,

    Je voudrai afficher un caractère d'un string mais je vois pas comment faire.

    J'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    with
      ada.text_io,
      ada.integer_text_io,
     
    use
      ada.text_io,
      ada.integer_text_io,
     
    procedure Main is
       str  : String (0 .. 79);
       taille : Natural;
     
     begin
       get_line(str, taille ); skip_line;
       put(str(0)); new_line;
    end Main;
    Je voudrais donc affiché le 1er caractère de la chaîne str. Mais put ne m'affiche rien !

    Merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 43
    Points
    43
    Par défaut
    Bonsoir hbx360,

    Il y a plusieurs choses qui ne vont pas dans ton code.

    Premièrement, l'erreur classique qu'on commet lorsqu'on vient d'un autre langage : le première élément d'une chaîne de caractère n'est pas 0 mais 1 en Ada (cf. 3.6.3 (4/2)).

    Ensuite, Tu n'a pas besoin de faire un Skip_Line après avoir fait un Get_Line, car il le fait implicitement (cf. A.10.7 (19)).

    Ce qui donne au final le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    with Ada.Text_IO;
     
    use Ada.Text_IO;
     
    procedure Main is
       Str    : String (1 .. 80);
       Taille : Natural;
    begin
       Get_Line (Str, Taille);
       Put (Str (1));
       New_Line;
    end Main;

  3. #3
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Personnellement, pour éviter tout problème avec la taille de la chaîne qui est ici fixée à 80 caractères, j'aurais tendance à utiliser get_line sans paramètre.

    Du coup, le code aurait plutôt cette tête-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    with Ada.Text_IO;
     
    use Ada.Text_IO;
     
    procedure Main is
       Str    : String := Get_Line;
    begin
       Put (Str (1));
       New_Line;
    end Main;
    Bien sûr dans ce cas, il faudrait tester l'exception si on cherche à entrer une chaîne de taille trop importante pour envoyer une erreur.

    Après, si la taille de 80 caractères est une contrainte, il faut garder la version précédente.

    Enfin, pour rebondir sur ce que disait Yoratheon, les index de tableaux, et a fortiori de chaînes, ne commencent pas forcément à 0 ni même à 1. C'est la déclaration de celle-ci qui donne les bornes.
    Ainsi, il est possible d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      my_string : String (12 .. 91);
    Dans ce cas, il est souvent plus sioux d'utiliser les attributs First et Last. Ainsi, ton programme d'origine deviendra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    with ada.text_io; use ada.text_io;
     
    procedure Main is
       str  : String (12 .. 91);
       taille : Natural;
     
     begin
       get_line(str, taille);
       put(str(Str'First));
       new_line;
    end Main;
    Cela le rend plus robuste en cas d'utilisation d'un index bizarre.

    Du coup, je te recommande la lecture de la page Wikibooks sur les IO texte avec ses pages ARM associées comme fourni par Yoratheon.

    Plus généralement, le Wikibook reste une bonne source d'informations.

    Bonne découverte d'Ada

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Ok merci Blackknight et Yoratheon pour votre aide.


    Citation Envoyé par Blackknight Voir le message
    Bonne découverte d'Ada
    Merci mais c'est pas facile quand tu viens du C !

    Salut.

  5. #5
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par hbx360 Voir le message
    Merci mais c'est pas facile quand tu viens du C !
    Ça, c'est sûr que c'est plus contraignant que le C et il est vrai que la partie gestion des chaînes de caractères est assez pénible.
    Après en Ada, quand on a compris que ça ne sert à rien de lutter contre le compilateur mais qu'il est là pour nous aider, ça va tout de suite mieux.
    Et puis, certes le langage est verbeux et contraignant mais cela facilite grandement la relecture même après plusieurs années.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Ok merci pour votre aide, je met en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2023, 15h51
  2. [VB.NET] Modifier un caractère d'un string
    Par mat087 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 26/11/2005, 23h44
  3. Réponses: 4
    Dernier message: 14/10/2005, 09h15
  4. [VBA] Un caractère dans un string
    Par Neilos dans le forum Access
    Réponses: 5
    Dernier message: 23/06/2005, 14h58
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo