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

Langage Delphi Discussion :

Comment mettre aucune valeur dans Array of integer?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut Comment mettre aucune valeur dans Array of integer?
    Bonsoir,
    Je me suis fait un tableau INTEGER dynamique à une dimension de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Myarray : array of integer;
    Ma question est: Et-il possible de mette aucun valeur par example à l'emplacement 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Myarray[1] :=  1;
    Myarray[2] :=  2;
    Myarray[3] :=  Ici je voudrais mettre aucune valeur ????
    Myarray[4] :=  4;

    pour obtenir quelque chose comme cela [1,2,,4]

    Merci beaucoup pour l'aide, salutations

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Je ne voudrais pas dire une betise mais lorsque tu cré une variable elle se "remplie" forcement avec des valeur quelquonque, donc tu as grand interet a y mettre des valeur, le mieux dans ton cas serait peut etre de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Myarray[1] :=  1;
    Myarray[2] :=  2;
    Myarray[3] :=  -1; //ou une toute autre valeur que tu choisira
    Myarray[4] :=  4;
    Tout depend de ce que tu veux faire de ces valeurs, donne plus de detail.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Points : 88
    Points
    88
    Par défaut
    A vrai dire j'ai mis des 9999999, en espèrent de ne jamais atteindre ce chiffre!
    J'ai aussi posté juste pour savoir si c'était aussi possible de mettre une valeur symbolisant rien...
    un peu comment avec les array of string
    example:
    Myarray[3] := '';
    avec un sting on obtient ceci ['1','2','','4']
    donc j'ai pensé avec Integer on pouvait peut-être atteindre ceci [1,2,,4] !

  4. #4
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 502
    Points : 2 769
    Points
    2 769
    Billets dans le blog
    10
    Par défaut
    Tu peux aussi créer un tableau à 2 colonnes. La deuxième booleenne spécifiant si la valeur à été utilisée ou non (NULL) . SI il n'y à pas trop de valeurs tu peux travailler avec des variants.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    vous avez un array of integer, et un integer est toujours rempli.

    soit vous utiliser une valeur indiquant vide (-1, high(integer), low(integer) etc.)

    soit vous n'utiliser pas des integer mais des variants. Les variants peuvent êtres mis a nul ou a une valeur entière donc null peut être la valeur vide.

    Attention, vous devrez impérativement vérifier si la valeur est null ( isNull(maVariant) ) avant d'essayer de l'utiliser comme integer. Mettre un null dans un integer plante.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    Pour info:
    Myarray[3] := '';
    '' est un string , vide mais un string quand même.

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par domlagagne
    '' est un string , vide mais un string quand même.
    Remarque pertinente, il y a surtout une occupation mémoire quasi null.
    En gros il manque à Delphi Win32 le type nullable de .NET.

    Quant aux variants c'est une trés bonne approche, qui auto-documente le code, mais elle se fera au détriment des performances.

    Peut être travailler avec des types pointeur afin d'utiliser la valeur Nil, mais là ce sera au détriment de la maintenance et de la lisibilité du code.

    L'ajout des types nullable, ça c'est une vrai demande à formuler auprès de Codegear

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Points : 84
    Points
    84
    Par défaut
    si les valeurs de ton tableau sont toujours positives, alors tu peux mettre -1 dans la case que tu souhaite vide car les Integer ont des valeurs negatives contrairement aux Cardinal qui ne sont que positifs.
    Ensuite quand tu parcours, pour savoir si la case est "vide" tu test si elle vaut -1 ou non!

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    tu peut utilisé une astuce qu'il ne faut pas conseiller a la legere

    plutot que de creer un array of integer
    creer un array of Pointer

    il te suffira donc pour inserer un entier de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Myarray[1] :=  Tobject(1); 
    Myarray[2] :=  Tobject(2);
    Myarray[3] :=  nil; //ou une toute autre valeur que tu choisira
    Myarray[4] :=  Tobject(4);

    et lors de l'acces a ta donnée faire un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      if assigned(Myarray[i]) then 
        showmessage(format('ma valeur de %d est : %d ',[i,integer(Myarray[i])])
      else  
        showmessage(format('%d na pas de valeur ',[i])
    attention ce n'est qu'une solution qui pour ma part ne me satisfait pas
    il ne devrais jamais exiter de valeur null

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #10
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    La seule vraie solution est bien le type nullifiable qu'indique Laurent. Et s'il n'existe pas en Win32, créons-le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type
      TNullableInt = record
        IsNull : boolean;
        Value : integer;
      end;
    Bien entendu, on l'accompagnera de quelques routines pour faciliter son traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function NullInt : TNullableInt;
    begin
      Result.IsNull := True;
      Result.Value := 0;
    end;
     
    procedure SetNullableIntToValue(var NullableInt : TNullableInt; Value : integer);
    begin
      NullableInt.IsNull := False;
      NullableInt.Value := Value;
    end;
    etc.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par anapurna
    il ne devrais jamais exister de valeur null
    ça c'est un vrai débat.

    Pour la création d'un record comme le propose SJRD, et pour ceux utilisant BDS, il y a peut être possibilité de pousser la réflexion en utilisant qq évolutions des records sous Win32 ?

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 10/01/2012, 21h40
  2. [Débutant] comment mettre la valeur d'un pixel dans un vecteur?
    Par Imène_23 dans le forum Images
    Réponses: 1
    Dernier message: 20/06/2011, 16h33
  3. [TDBChart]Comment mettre les valeurs DANS les barres
    Par SubZero2 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/09/2008, 08h43
  4. Réponses: 5
    Dernier message: 12/06/2006, 12h05

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