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 :

For + Case en une instruction.


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut For + Case en une instruction.
    Bonjour à tous,

    Pour mon apllication j'ai dû créer de grands tableaux contenant les textes (potentiellement) ajoutable à un treeview en fonction de certaines données que l'utilisateur à rentrer.
    Et j'aimerais pouvoir parcourir ce tableau de manière non séquentiel(par exemple lire les indice de 4 à 8, le 15ième et de 57 à 89). Actuellement je fais des trucs de ce style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For I:=0 to length(tableau)-1 do
    Begin
     Case I of 4..8,9,57..89:
               Begin
    ....
    Mais je commence à trouver ça un peu lourd (et un peu lent) à la longue...N'existerait-il pas un moyen de réaliser ça plus simplement (avec un IN par exemple), ou suis-je obligé de continuer dans ma voie ?

    Merci pour vos éclairsissements,

    A+.

  2. #2
    Membre confirmé Avatar de host22
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 222
    Par défaut
    Si t'utilise se truc pour la recherche je te conseil de creee une fonction qui te renvoi la position mais il faut la cree selon ta conception exemple:
    si on recherche fred qui est en position 10 tu fais
    f(red) elle e renvois 10en fin sa s'appele H coding? j'éspère que je t'es compris?

  3. #3
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Disons que ton besoin n'est pas très clair.
    C'est vrai que tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if I in [4..8,9,57..89] then
    mais bon...
    SI tu nous dis à quoi ça sert on aura + d'idées (peut être !)

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Bonjour


    Pour mon apllication j'ai dû créer de grands tableaux contenant les textes (potentiellement) ajoutable à un treeview en fonction de certaines données que l'utilisateur à rentrer.
    Et j'aimerais pouvoir parcourir ce tableau de manière non séquentiel(par exemple lire les indice de 4 à 8, le 15ième et de 57 à 89).
    Un tableau de textes...ok. une liste de chaines ne serait elle pas mieux adaptée.
    Avec une stringlist tu bénéficies de toutes les méthodes de la classe TStringList notamment le parcours d'éléments, l'accés direct, ajout supression etc..


    @+

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 479
    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 479
    Par défaut
    salut

    si j'ai tout compris actuellement selon les action tu genere un numero
    qui te permettra d'aller chercher certaine ligne de ton tableau
    en fait il serait plus simple de creer une liste d'indice selon les action realisée

    de plus le case est limite a 255 tout comme les ensemble donc le in.
    De plus le in est une fontion lentes.
    Je serait toi je reverrai un peut ma logique

    tu pourrait par exemple utiliser des arbres
    et a chaque changement d'unite le chiffre correspond au noeud a atteindre en partant de plus haut au plus pas

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     233
    []--[](01)
    []--[](11)
    []--[](21)
         [](22)
         []--[](231)
              [](232)
              [] (233)<= ici la cellule contenant le texte
    @+ Phil

  6. #6
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par anapurna
    de plus le case est limite a 255 tout comme les ensemble donc le in.
    De plus le in est une fontion lentes.
    Le in est très rapide : il s'agit d'une simple instruction bt (bit test) en assembleur.

    Il existe aussi une version condensée du for in depuis Delphi... 2005 je crois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for Indice in [4..8, 9, 57..89] do
    Il y a des chances pour le compilateur optimise ça du mieux qu'il peut
    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.

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

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 566
    Par défaut
    salut

    si le tableau n'est pas trop grand (< 255 élément), tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var
      i : byte;
     
    For I:=0 to length(tableau)-1 do
    Begin
      if I in [4..8,9,57..89] then
      begin
    ....
    Mais je trouve que cela n'apporte pas grand chose, en définitive, sinon une contrainte supplémentaire en maintenance.

    une autre solution consiste à aller chercher directement les élément indicés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      tableau[4]...
      tableau[5]...
      tableau[6]...
      tableau[7]...
      tableau[8]..
    ....
    Place le code de traitement dans une procédure pour éviter les redondances et passes-y tes éléments de tableaux.

    >> plus besoin de for ni de case, mais cela suppose que
    - l'on ne s'intéresse qu'aux dites lignes
    - elles soient toujours présentes (taille de ton tableau >= 89) sinon ilm faut faire des test de limites.

    En faisant abstraction de l'appel de procédure, le fait de dérouler une boucle amène en général un gain de vitesse (c'est une technique d'optimisation, notamment dans les jeux). Mais il faut rester raisonnable....

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

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

Discussions similaires

  1. blocage sur une instruction For Next et Exit For
    Par valérieF dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/05/2015, 16h54
  2. Une instruction s'execute qd on appuie sur entree
    Par nbutin dans le forum C++Builder
    Réponses: 1
    Dernier message: 17/08/2004, 00h48
  3. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  4. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  5. Passer de la zone d'édition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 14h44

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