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

WinDev Discussion :

Régime pour code


Sujet :

WinDev

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 109
    Points : 48
    Points
    48
    Par défaut Régime pour code
    Bonjour,

    Quelqu'un aurait il une idée pour alléger ce code

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    // Supprimer toutes les lignes sélectionnées dans une table ENREG 1
    i1 est un entier
    NbSelection1 est un entier = TableSelectOccurrence(TABLE_EXPRESS_ENREGISTREMENT1)
    POUR i1 = NbSelection1 A 1 PAS -1
    	TableSupprime(TABLE_EXPRESS_ENREGISTREMENT1, TableSelect(TABLE_EXPRESS_ENREGISTREMENT1, i1))
    FIN		
    TableInsèreLigne(TABLE_EXPRESS_ENREGISTREMENT1, 1, "1")
    TableEnregistre(TABLE_EXPRESS_ENREGISTREMENT1)	
    // Supprimer toutes les lignes sélectionnées dans une table ENREG 2
    i2 est un entier
    NbSelection2 est un entier = TableSelectOccurrence(TABLE_EXPRESS_ENREGISTREMENT2)
    POUR i2 = NbSelection2 A 1 PAS -1
    	TableSupprime(TABLE_EXPRESS_ENREGISTREMENT2, TableSelect(TABLE_EXPRESS_ENREGISTREMENT2, i2))
    FIN		
    TableInsèreLigne(TABLE_EXPRESS_ENREGISTREMENT2, 1, "0")
    TableEnregistre(TABLE_EXPRESS_ENREGISTREMENT2)	
    // Supprimer toutes les lignes sélectionnées dans une table ENREG 3
    i3 est un entier
    NbSelection3 est un entier = TableSelectOccurrence(TABLE_EXPRESS_ENREGISTREMENT3)
    POUR i3 = NbSelection3 A 1 PAS -1
    	TableSupprime(TABLE_EXPRESS_ENREGISTREMENT3, TableSelect(TABLE_EXPRESS_ENREGISTREMENT3, i3))
    FIN		
    TableInsèreLigne(TABLE_EXPRESS_ENREGISTREMENT3, 1, "0")
    TableEnregistre(TABLE_EXPRESS_ENREGISTREMENT3)	
    // Supprimer toutes les lignes sélectionnées dans une table ENREG 4
    i4 est un entier
    NbSelection4 est un entier = TableSelectOccurrence(TABLE_EXPRESS_ENREGISTREMENT4)
    POUR i4 = NbSelection4 A 1 PAS -1
    	TableSupprime(TABLE_EXPRESS_ENREGISTREMENT4, TableSelect(TABLE_EXPRESS_ENREGISTREMENT4, i4))
    FIN		
    TableInsèreLigne(TABLE_EXPRESS_ENREGISTREMENT4, 1, "0")
    TableEnregistre(TABLE_EXPRESS_ENREGISTREMENT4)	
    // Supprimer toutes les lignes sélectionnées dans une table ENREG 5
    i5 est un entier
    NbSelection5 est un entier = TableSelectOccurrence(TABLE_EXPRESS_ENREGISTREMENT5)
    POUR i5 = NbSelection5 A 1 PAS -1
    	TableSupprime(TABLE_EXPRESS_ENREGISTREMENT5, TableSelect(TABLE_EXPRESS_ENREGISTREMENT5, i5))
    FIN		
    TableInsèreLigne(TABLE_EXPRESS_ENREGISTREMENT5, 1, "0")
    TableEnregistre(TABLE_EXPRESS_ENREGISTREMENT5)	
    // Supprimer toutes les lignes sélectionnées dans une table ENREG 6
    i6 est un entier
    NbSelection6 est un entier = TableSelectOccurrence(TABLE_EXPRESS_ENREGISTREMENT6)
    POUR i6 = NbSelection6 A 1 PAS -1
    	TableSupprime(TABLE_EXPRESS_ENREGISTREMENT6, TableSelect(TABLE_EXPRESS_ENREGISTREMENT6, i6))
    FIN		
    TableInsèreLigne(TABLE_EXPRESS_ENREGISTREMENT6, 1, "0")
    TableEnregistre(TABLE_EXPRESS_ENREGISTREMENT6)

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Bonsoir,

    Si j'ai bien lu, il s'agit de tables fichier, que vous videz pour y réécrire ensuite une ligne et l'enregistrer.

    1. Suppression de lignes dans une table (en général)
    Pour les tables fichier, attention aux répercussions sur le fichier.
    TableSupprime(MaTable,NoLigne)
    Si NoLigne (optionnel) n'est pas précisé, toutes les lignes sélectionnées sont supprimées.

    2. Suppression de toutes les lignes dans une table mémoire.
    TableSupprimeTout (MaTable) supprime toutes les lignes de la table.

    Vous pourriez également jouer avec les indirections pour faire une boucle de 1 à 6 et énumérer les tables, mais je suppose que les noms de table vont être plus significatifs.
    Sinon, le code serait encore plus compact puisque l'indirection serait également utilisée dans l'insertion et l'enregistrement.
    Je vous laisse explorer cela.

    Hemgé

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 280
    Points : 12 974
    Points
    12 974
    Par défaut
    Bonjour,
    TalbeSupprimeTout ne peut pas être utilisé ici, car seules les lignes sélectionnées sont supprimées.

    Les indirections peuvent tout à fait être utilisées, quitte à stocker dans une liste/pile les noms des tables.

    Tatayo.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Bonjour tatayo,

    Citation Envoyé par tatayo Voir le message
    TalbeSupprimeTout ne peut pas être utilisé ici, car seules les lignes sélectionnées sont supprimées.
    Si TableSupprimeTout ne peut pas être utilisé ici c'est parce qu'on travaille avec des tables fichier et non des tables mémoire.
    Par contre, cette fonction ne tient pas compte des lignes sélectionnées ou pas. Comme son intitulé - TableSupprimeTout - l'indique, à la différence de TableSupprime, elle supprime toutes les lignes et elle n'attend d'ailleurs que le nom de la table comme paramètre.

    Hemgé

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 280
    Points : 12 974
    Points
    12 974
    Par défaut
    Je pense que je me suis mal exprimé (manque de café !).
    Dans le code présenté, seules les lignes sélectionnées doivent être supprimées.
    Je n'avais pas percuté sur le côté table mémoire/fichier, vu que je n'utilise que les premières (pas d'analyse, pas de fichier HF).

    Donc en fait on est d'accord: pas de TableSupprimeTout !

    Tatayo.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 153
    Points
    2 153
    Par défaut
    Vous pourriez également déclarer un seul i et un seul NbSelection.... et en début de script c'est plus lisible.... sinon, plus radical, factorisez !

  7. #7
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Si le code fait bien le job, il suffit de passer par les indirections comme l'a suggéré Hemgé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    i,j,NbSelection sont des entiers
    POUR i = 1 A 6
            // Supprimer toutes les lignes sélectionnées dans des tables ENREG 1 à 6
            NbSelection1 = TableSelectOccurrence({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp})
            POUR j = NbSelection1 A 1 PAS -1
                    TableSupprime({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, TableSelect({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, j))
            FIN             
            TableInsèreLigne({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, 1, "1")
            TableEnregistre({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp})  
    FIN

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Citation Envoyé par laurent30s Voir le message
    Si le code fait bien le job, il suffit de passer par les indirections comme l'a suggéré Hemgé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    i,j,NbSelection sont des entiers
    POUR i = 1 A 6
            // Supprimer toutes les lignes sélectionnées dans des tables ENREG 1 à 6
            NbSelection1 = TableSelectOccurrence({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp})
            POUR j = NbSelection1 A 1 PAS -1
                    TableSupprime({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, TableSelect({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, j))
            FIN             
            TableInsèreLigne({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, 1, "1")
            TableEnregistre({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp})  
    FIN
    Tstt, je croyais qu'on essayait de ne pas fournir trop vite le code, mais plutôt de corriger et améliorer les codes soumis...

    Tant qu'on y est : l'idée est de vider la table de toutes ses lignes.
    Donc, soit c'est une table mémoire et TableSupprimeTout
    soit c'est une table fichier et il faut tout sélectionner avant de supprimer.
    En fait, Nathalie35000 s'est inspirée de l'exemple de la doc pour sélectionner toutes ses lignes

    Et cet exemple est malheureux, puisque la fonction TableSelectPlus permet de sélectionner toutes les lignes d'une table sans la parcourir, ce qui ne semble pas très connu.

    TableSelectPlus(<Nom de la table> [, <Indice 1> [, ... [, <Indice N>]]])
    <Nom de la table> : Chaîne de caractères (avec ou sans guillemets)

    Nom de la table à manipuler.
    Si ce paramètre correspond à une chaîne vide (""), la table à laquelle appartient le traitement en cours est manipulée.

    <Indice 1> : Entier optionnel

    Premier indice de la ligne à sélectionner.

    Si les paramètres <Indice 1> et <Indice N> ne sont pas précisés, toutes les lignes de la table spécifiée sont sélectionnées.
    Donc, in fine, pour améliorer le code proposé et en tenant compte qu'on insère pas la ligne entre des lignes existantes mais en fin de table (dans le cas présent, c'est d'ailleurs la seule) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    i est un entier
    POUR i = 1 A 6
            // Supprimer toutes les lignes 
      TableSelectPlus({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp})  
      TableSupprime({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}    
           // Ajouter une ligne
       SELON i
         CAS 1
             TableAjoute({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, "1")  
         AUTRE CAS
             TableAjoute({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp}, "0") 
       FIN
       TableEnregistre({"TABLE_EXPRESS_ENREGISTREMENT"+i,indChamp})  
    FIN

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 280
    Points : 12 974
    Points
    12 974
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Tant qu'on y est : l'idée est de vider la table de toutes ses lignes.
    Rien n'est moins sûr. D'après ce que j'ai compris du code il faut supprimer les lignes sélectionnées, et non toutes les lignes.

    Tatayo.

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Rien n'est moins sûr. D'après ce que j'ai compris du code il faut supprimer les lignes sélectionnées, et non toutes les lignes.

    Tatayo.
    TableSelectOccurence fatal ....
    Mea culpa, mea maxima culpa !!

  11. #11
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Tstt, je croyais qu'on essayait de ne pas fournir trop vite le code, mais plutôt de corriger et améliorer les codes soumis...
    On peut même aider sous forme de charade ça sera plus facile pour les demandeurs

    Plus sérieusement, dans un autre message Nathalie se renseigne sur les tarifs de windev, c'est donc apparemment une débutante en windev.
    Je n'est pas refait son code, je lui ai juste montré comment on fait une indirection dont tu parlais précédemment.
    Pour quelqu'un qui débute voir un exemple facilite grandement la compréhension des indirections...

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Citation Envoyé par laurent30s Voir le message
    On peut même aider sous forme de charade ça sera plus facile pour les demandeurs
    Oh, mais certaines demandes elles-mêmes ressortent régulièrement au genre charade, devinette ou intrigue !

    Citation Envoyé par laurent30s Voir le message
    c'est donc apparemment une débutante en windev.
    De fait, elle travaille sur une version Express (voir la dénomination de toutes ses variables)

    Mais, elle est du genre qui apprend vite et se décarcasse, donc du genre pour qui la recherche est un outil pédagogique.
    Et 1 médaille pour Nathalie (pas encore 35000 quand même)
    C'est donc à dessein que je la laissais explorer les indirections.
    Mais avec un exemple précisément sur un de ses problèmes, elle apprendra aussi, j'en conviens dans son cas.

  13. #13
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 167
    Points
    167
    Billets dans le blog
    1
    Par défaut Méthode inductive et indirections
    Bonjour,

    Comme cela a été dit clairement, les indirections simplifient grandement les codes, réduisant les blocs de n à 1.

    Ceci d'autant plus qu'on y aura pensé en phase de conception.

    Voici quelques principes si tu débutes :

    L'abstraction vise à simplifier en généralisant. Encore faut-il qu'elle puisse être perçue comme tel, sans donner le sentiment d'une économie de la pensée réalisée par une complexification du code.

    Les bases de la simplification sous Windev utilisent les mots clés, fonctions et principes suivants :
    • le mot clé MoiMême
    • les indirections
    • les procédures automatiques TimerSys, Timer, ThreadExecute
    • la fonction ChampEnCours
    • Les champs indicés
    • Les groupes
    • ExecuteTraitement
    • la compilation dynamique
    • le MCI
    • Les FAA ou actions Windows prédéfinies
    • Les briques de code
    • Les composants
    • La lecture attentive du mode d’emploi et de la rubrique Voir aussi…

    En espérant t'avoir aidée avec ces principes généraux,

    Bien cordialement,

    Jacques De Schryver

    nb : ¨Pense également à la puissance de ces principes conjugués, par exemple un champclone géré par des indirections. C'est là tout le génie de Windev.

Discussions similaires

  1. librairie GTK pour code::blocks
    Par teddy42 dans le forum Code::Blocks
    Réponses: 6
    Dernier message: 25/10/2006, 19h47
  2. Conseil pour code de base
    Par Alpha31 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 21h12
  3. [VBA] Aide pour code
    Par Virgile59 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 14h16
  4. Calcul simple pour code couleur
    Par Boumeur dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/04/2005, 10h51
  5. Est ce que ça existe une api java pour code barre ?
    Par miloud dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 14/04/2005, 17h20

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