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 :

Création de tableau dynamique


Sujet :

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 Création de tableau dynamique
    Bonjours,
    J'aurrais trois petits questions sur les tableaux Dynamiques.
    examples
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var text: array of string;
    begin 
    ... 
    SetLength(text, N+1); 
    text[N] := 'Hallo'; 
    ...
    end;
    Q1.
    Comment savoir le nombres de lignes dans un tableau dynamique!
    Dois-je passer par une boucle, si oui alors comment savoir si je suis a la fin
    de ma ligne (la variable N est inconnue).

    Q2.
    Pour initialiser tout a zero suffit-il de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    N := 0;
    Initialize(text, N);
    Q3.
    Pour désalloué le tableau completement de la mémoire puis je faire ceci...!

    Grand Merci pour un tout petit example pour mieux comprendre...
    Salutations
    Ardely

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par Ardely
    Q1.
    Comment savoir le nombres de lignes dans un tableau dynamique!
    les fonctions Low et High te donnereont les bornes de ton tableau

    Q2.
    Pour initialiser tout a zero suffit-il de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    N := 0;
    Initialize(text, N);
    Pourquoi pas !
    j'ai l'habitude de fillChar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FillChar(text, SizeOf(text), #0);
    Q3.
    Pour désalloué le tableau completement de la mémoire puis je faire ceci...!
    Moi j'utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SetLength(text,0);
    a+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par Ardely
    Q2.
    Pour initialiser tout a zero suffit-il de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    N := 0;
    Initialize(text, N);
    Je n'utilise plus Delphi depuis longtemps, et j'ai oublé comment initialiser un tableau dynamique, mais il est clair que la réponse
    Citation Envoyé par Yurck
    Pourquoi pas !
    ne convient pas.

    Ton tableau text est un tableau de string, et 0 ne signifie absolument rien pour un string.

  4. #4
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Exact,
    mais N ne désigne pas la valeur d'initialisation mais la taille à initialiser il devrait sans doute être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Initialize(text, SizeOf(N));
    enfin moi j'utilises Fillchar

    a+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Il s'agit d'un tableau de string, et un string ne s'initialise pas comme un integer ou autre valeur scalaire.

  6. #6
    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
    Pour initialiser un tableau de string, c'est très simple : il suffit de... Ne rien faire !
    En effet, Delphi connaît string comme étant un type qui exige une initialisation. Delphi la gère lui-même. D'ailleurs, les tableaux dynamiques exigent aussi une initialisation. Et en général, tout type de donnée qui exige une initialisation exige également une finalisation. Et Delphi fait tout ça tout seul. Il le fait tellement bien tout seul que vous ne devez pas repasser derrière/devant lui, sinon vous risquez des problèmes !

    Un FillChar sur un array of string est à proscrire : il ne faut jamais manipuler la mémoire qui référence des string ! Les types interfaces sont également dans le cas.

    Citation Envoyé par Yurck
    les fonctions Low et High te donnereont les bornes de ton tableau
    Et la fonction Length te donnera sa longueur (= High - Low + 1).

    Citation Envoyé par Ardely
    Pour désalloué le tableau completement de la mémoire puis je faire ceci...!
    Comme je l'ai dit, il ne faut rien faire : Delphi gère ça lui-même. Tu auras perte d'efficacité à vouloir vider un tableau inutilement.

    Par contre je ne connais pas Initialize et Finalize, et je ne les trouve pas dans l'aide de Delphi. Il doit s'agir (marquer l'hypothèse) de fonctions de très bas niveau que Delphi appelle dans le traitement de certains types de données. Mais il ne faut donc pas les utiliser explicitement.

    Citation Envoyé par Yurck
    FillChar(text, SizeOf(text), #0);
    En admettant même que tu ne travailles pas sur des string... Pour un tableau dynamique, cet appelle plantera d'une manière que tu jugeras aléatoire - je le sais par expérience, pas plus tard qu'aujourd'hui - n'importe où dans ton programme. D'abord, tu ne dois pas utiliser SizeOf(text) mais Length(text)*sizeof(integer) (si ton tableau est un tableau d'entiers). Ensuite, comme premier paramètre, il ne faut pas mettre Text, mais bien Text[0]. Car il s'agit d'un paramètre var, et non d'une adresse, et donc que Delphi va automatiquement prendre l'adresse de la variable que tu passes.

    L'appel que tu donnes est valable pour une variable de type record. Et encore, pour un record qui ne contient aucun champ d'un type exigeant une initialisation.

  7. #7
    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
    Bonsoir,
    Merci beaucoup à tous vous m'avez bien aider, j'ai fait des tests selon vos
    conseils qui fonctionne très bien, merci et bon weekend .
    Ardely

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

Discussions similaires

  1. [XL-2007] Prb création de Tableau dynamique par VBA
    Par jean bapt' dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/09/2012, 10h24
  2. [AC-2010] Création de tableau dynamique sur Access 2010/2007
    Par Prisma_dago dans le forum Access
    Réponses: 2
    Dernier message: 08/12/2010, 12h30
  3. [Rico] Ajax - Open rico création de tableau dynamique
    Par Naruto69 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 08/04/2008, 17h57
  4. Création de tableau dynamique et formulaire
    Par vincent68 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/08/2007, 16h12
  5. [1.1][vb.net] création de tableau dynamique
    Par elastoplas dans le forum ASP.NET
    Réponses: 3
    Dernier message: 01/12/2006, 09h44

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