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

 Delphi Discussion :

Coller deux nombre entiers


Sujet :

Delphi

  1. #1
    Membre éprouvé
    Avatar de Aooka
    Homme Profil pro
    Scripting Powershell & Wlangage
    Inscrit en
    Juillet 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Scripting Powershell & Wlangage

    Informations forums :
    Inscription : Juillet 2015
    Messages : 229
    Points : 1 038
    Points
    1 038
    Par défaut Coller deux nombre entiers
    Bonjour,


    Je cherche, mais ne trouvant pas je viens à vous : je cherche à coller deux Cle de type Integer.

    Exemple :
    Cle_Primaire = 274
    Cle_Secondaire = 001
    Cle_Final = 274001



    Voilà je ne sais comment m'y prendre,
    Comme d’habitude, je vous remerci d'avance,
    Et vous souhaite une excellente journée !


    Edit : Car vous vous doutez surement du résultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.OnShow(Sender: TObject);
    var
      Cle_Primaire , Cle_Secondaire , Cle_Final : Integer;
    begin
      Cle_Primaire := 247;
      Cle_Secondaire := 001;
      Cle_Final := Cle_Primaire + Cle_Secondaire;
     
      ShowMessage(Cle_Final.ToString);
    end;

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    A condition que la somme ne dépasse pas la capacité d'un "Integer":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cle_Final := StrToInt(IntToStr(Cle_Primaire) + IntToStr(Cle_Secondaire));

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 670
    Points : 10 677
    Points
    10 677
    Par défaut
    @GoustiFruit: ta solution ne fonctionne pas

    Parce que IntToStr(001) va donner "1" au lieu de "001".

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 803
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 803
    Points : 13 493
    Points
    13 493
    Par défaut
    Cle_Final := Format('%.3d%.3d', [Cle_Primaire, Cle_Secondaire]);.

    Cle_Final est une chaîne bien entendu

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 356
    Points
    15 356
    Par défaut
    Citation Envoyé par foetus Voir le message
    @GoustiFruit: ta solution ne fonctionne pas

    Parce que IntToStr(001) va donner "1" au lieu de "001".
    Faut passer par Format en précisant le nombre de zéros voulus.

    Argggh, grillé par Andnotor à une minute près

  6. #6
    Membre éprouvé
    Avatar de Aooka
    Homme Profil pro
    Scripting Powershell & Wlangage
    Inscrit en
    Juillet 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Scripting Powershell & Wlangage

    Informations forums :
    Inscription : Juillet 2015
    Messages : 229
    Points : 1 038
    Points
    1 038
    Par défaut
    Je n'aurais pas pensé à utiliser format ! Remarquez, je ne l'ai encore jamais utilisé en Delphi !
    Merci à tous pour vos réponses, vous avez été rapides dîtes !

    #Résolu.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 670
    Points : 10 677
    Points
    10 677
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Faut passer par Format en précisant le nombre de zéros voulus.

    Argggh, grillé par Andnotor à une minute près
    Dans ce cas, passer par des chaînes de caractères c'est nul

    Clef_Final = (Clef_Primaire * 10^(nb_zeros)) + Clef_Secondaire

  8. #8
    Membre éprouvé
    Avatar de Aooka
    Homme Profil pro
    Scripting Powershell & Wlangage
    Inscrit en
    Juillet 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Scripting Powershell & Wlangage

    Informations forums :
    Inscription : Juillet 2015
    Messages : 229
    Points : 1 038
    Points
    1 038
    Par défaut
    Citation Envoyé par foetus Voir le message
    Dans ce cas, passer par des chaînes de caractères c'est nul

    Clef_Final = (Clef_Primaire * 10^(nb_zeros)) + Clef_Secondaire

    Le truc, c'est que le nombre de 0 peut changer en cours de route en effet :
    Cle_Secondaire.ValeurMinimum = 001
    Cle_Secondaire.ValeurMaximum = 999

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 919
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 919
    Points : 15 356
    Points
    15 356
    Par défaut
    Citation Envoyé par foetus Voir le message
    Dans ce cas, passer par des chaînes de caractères c'est nul

    Clef_Final = (Clef_Primaire * 10^(nb_zeros)) + Clef_Secondaire
    Bien obligé, si :
    Citation Envoyé par Martin Lestas Voir le message
    Le truc, c'est que le nombre de 0 peut changer en cours de route en effet :
    Cle_Secondaire.ValeurMinimum = 001
    Cle_Secondaire.ValeurMaximum = 999
    Et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure autretest;
    var
      i: cardinal;
      s: string;
    begin
      for i := 1 to 999 do begin
        s := Format('%.3u', [i]);
        Form1.log('autretest : ' + s);
      end;
    end;
    -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    autretest : 001
    autretest : 002
    ...
    autretest : 009
    autretest : 010
    autretest : 011
    ...
    autretest : 099
    autretest : 100
    autretest : 101
    ...
    autretest : 999

  10. #10
    Membre éprouvé
    Avatar de Aooka
    Homme Profil pro
    Scripting Powershell & Wlangage
    Inscrit en
    Juillet 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Scripting Powershell & Wlangage

    Informations forums :
    Inscription : Juillet 2015
    Messages : 229
    Points : 1 038
    Points
    1 038
    Par défaut
    Merci Jipété !

    Par contre, deux petites dernières avant de te laisser tranquille si sa ne te dérange point !

    Tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s := Format('%.3u', [i]);
    1. Pourquoi i est de type Cardinal ? Sachant qu'en plus le deuxième paramètre de la fonction Format(); doit d'être du type array[Integer] of TVarRec (type qui m'est d'ailleurs inconnu)
    2. De plus, pourquoi mettre la variable i entre crochet ?


    J'imagine que mes deux questionnements sont liés.


    Merci,

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 670
    Points : 10 677
    Points
    10 677
    Par défaut
    cardinal, c'est un entier non signé de 32 bits. Et tu passes ton nombre entre crochets, parce que la fonction Format veut un tableau (sûrement parce que Delphi ne supporte pas les ellipses).

    Sinon, je lâche l'affaire, je ne comprends pas vos délires, surtout si la clef secondaire c'est au plus 999

    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
    procedure autretest;
    var
      clef_primaire: cardinal;
      i: cardinal;
      s: string;
    begin
      clef_primaire := 274;
     
      for i := 1 to 999 do begin
        Form1.log('autretest : ' + IntToStr((clef_primaire * 1000) + i));
      end;
     
      clef_primaire := (clef_primaire * 1000);
     
      for i := 1 to 999 do begin
        Form1.log('autretest : ' + IntToStr(clef_primaire + i));
      end;
    end;

  12. #12
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 955
    Points
    3 955
    Par défaut
    Citation Envoyé par Martin Lestas Voir le message
    Le truc, c'est que le nombre de 0 peut changer en cours de route en effet :
    Cle_Secondaire.ValeurMinimum = 001
    Cle_Secondaire.ValeurMaximum = 999
    Tu as mal compris la réponse de Foetus, le nom de sa variable est sans doute mal choisi. Par nombre de zéros il fallait comprendre nombre de chiffres à décaler.

    Pour résoudre ton problème, il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cle_Final := Cle_Primaire * 1000 + Cle_Secondaire;
    La multiplication par 1000 produit arithmétiquement un décalage de trois chiffres décimaux. Si le décalage est constant, pas besoin d'en faire plus, a fortiori pas besoin de passer par des chaînes pour revenir à une valeur entière. je rejoins en ce point la conclusion de Foetus.

    Cdlt

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

Discussions similaires

  1. Coller deux array l'un à côté de l'autre
    Par zooffy dans le forum ASP.NET
    Réponses: 10
    Dernier message: 19/02/2010, 13h15
  2. [JMF] Coller deux videos
    Par titjohn dans le forum Multimédia
    Réponses: 5
    Dernier message: 05/11/2009, 20h38
  3. (GUI Builder) Coller deux JPanel
    Par Mattgic dans le forum NetBeans
    Réponses: 2
    Dernier message: 16/10/2009, 16h31
  4. [ImageMagick] Coller deux images
    Par Todd62 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 27/02/2006, 09h08
  5. Concaténation de deux integer pour former une clé primaire
    Par stoukou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 08/09/2005, 10h34

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