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 :

Alternative a ARRAY() de PHP


Sujet :

WinDev

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut Alternative a ARRAY() de PHP
    Je voudrai simuler avec Windev le fonctionnement de ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for($i=0;$i<count ($ARRAY);$i++){
    	$name = $ARRAY[$i]['name'];
    }
    C'est une recherche de champs par une clé et une ligne
    J'ai bien vu les tableaux associatifs, mais je souhaite ajouter une autre dimension pou les lignes.
    Et la rien n'est clair!, l'assistant ne le contemple pas.

    Merci

  2. #2
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Bonjour
    Vous ne trouverez malheureusement pas un équivalent de chaque notions de PHP en WinDev (au lire de vos messages), à un moment il va falloir penser avec ce qui est disponible en WinDev pour faire du WinDev.
    C'est à cela que sert la phase d'auto-formation... laquelle est largement complétée par l'aide.
    Et ne vous laissez plus faire par l'assistant, c'est vous qui programmez, pas l'EDI. L'assistant de fait que vous assister, vous avez encore (ou devez vite retrouver) le contrôle qui passe malheureusement par la connaissance issue de la lecture de cette aide.

    En effet, quand on passe d'un langage à un autre, outre les traduction de syntaxe et les équivalences de fonction, on se penche sur les types de variables.
    Et là, découverte, WinDev propose une armada de type de variable tableau allant du tableau simple jusqu'au tableau associatif de structures (avec des tableaux dans la structure et du bonheur pour adresser tout cela, si si c'est possible).
    Je pense que vous trouverez aisément une équivalence. Si je vous dis "tableau de structure" pour votre cas... on lira ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    StMonTruc est une structure
       EnPlume est une chaine
       EnCarton est un entier
    FIN
     
    TabTruc est un tableau de StMonTruc
     
    sTruc est un StMonTruc
    sTruc.EnPlume = "haha"
    sTruc.EnCarton = 2
     
    TableauAjoute(TabStruc,sTruc)
     
    Info(TabStruc[1].EnPlume) // Affiche haha
    Vous noterez l'usage (optionnel mais tellement plus clair) d'une variable pour la structure et l'envoi de ladite variable directement dans le tableau. Evidement on aurait pu adresser directement le tableau... mais c'est dans compter sur la fonction VariableRAZ qui vide votre variable structure.

    Bon courage

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    R&B j'ai suivi ton conseil et j'ai donc essayé en pensant Windev.
    Mais je suis bloqué.
    En fait ce que je veux faire est garder dans un tableau des lignes avec des colonnes et leur données.
    Quelque chose de courant.
    Un table en fait.
    Dans mon cas je ne connais pas la structure de chaque enregistrement, il peut être composé d'un nombre de colonnes variable.
    Comme la récupération du résultat d'une requête SQL par exemple.

    Donc ce que je voulais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tColonne_Entier est un tableau associatif de entier               // nom colonne + données colonne selon type de donnée
    tColonne_Chaine est un tableau associatif de chaine            // nom colonne + données colonne selon type de donnée
    tColonne_Monetaire est un tableau associatif de monétaire   // nom colonne + données colonne selon type de donnée
     
    tEnreg est tableau de tColonne      // Chaque Enreg a un nombre de colonnes variable et chaque colonne est de type distinct
     
    tLigne est tableau de TEnreg         // Chaque ligne contient en enregistrement d'un nombre variable de colonne
     
     
    VarPrixUnit_Ligne1 = tLigne[1]["PrixUnit"]
    J'espère que je ms suis bien expliqué.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pourquoi ne pas passer par un tableau de structures ?
    En premier, déclarer une structure, avec comme membre un tableau (de chaine, d'entier... en fonction des besoins).
    Puis déclarer un tableau de cette structure.

    Tatayo.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UneColonne est une Structure
    	NomColonne  est une chaîne
    	DataColonne est une chaîne
    FIN
     
    MesColonnes est un tableau de UneColonne
    Mais quand j'ai voulu créer une ligne cela ne passait pas!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MaLigne est un tableau de Mescolonnes
     
    Maligne[1] -> Mescolones -> UneColonne -> NomColonne + DataColonne
                                UneColonne -> NomColonne + DataColonne
                                UneColonne -> NomColonne + DataColonne
    Maligne[2] -> Mescolones -> UneColonne -> NomColonne + DataColonne
                                UneColonne -> NomColonne + DataColonne
                                UneColonne -> NomColonne + DataColonne
                                UneColonne -> NomColonne + DataColonne
                                UneColonne -> NomColonne + DataColonne
    *** Le nombre de colonnes varie à chaque ligne ****

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je vois un problème dans ton code: tu as un tableau de tableau, mais tu n'utilises qu'un seul indice. Il en manque un deuxième.
    Sinon tu as deux autres solutions:
    Soit tu utilises un tableau à 2 dimensions de UneColonne (dans ce cas le tableau est "carré")
    Soit tu dois utiliser un tableau d'une structure, dont un des membres est un tableau de UneColonne, si toutes les "lignes" n'ont pas le même nombre de colonnes.

    Perso je préfère la deuxième solution (plus claire de mon point de vue).

    Tatayo.

  7. #7
    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 441
    Points
    2 441
    Par défaut
    Bonsoir

    Vous ne connaissez visiblement pas le type Structure.
    Et vous n'avez pas pris le temps de consulter la doc, sans quoi vous auriez au moins produit un semblant de déclaration correcte de votre structure.

    Comment voulez-vous alors profiter du conseil tout à fait adéquat de tatayo ?
    Ce qu'il vous propose est très puissant et constitue exactement la solution à votre problème.
    Une petite recherche sur le forum vous permettrait d'ailleurs de retrouver des discussions précédentes sur cet usage des structures en présence de variables "dynamiques".

    Essayez déjà de comprendre comment fonctionne une structure et comment on la déclare.
    Ensuite, nous vous aiderons à peaufiner votre travail.

    Hemgé

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    Bonsoir Tatayo.
    L syntaxe n'est pas réel je l'ai écrit comme exemple, en fait je ne sais pas comment faire, je suis perdu 2 jour a cherche la meilleure solution, ou au moins une.

    Le Tableau de Structure, je l'ai essayé, mais il manque le nº de ligne/enregistrement. C'est pour cela que voulait imbriquer cela dans un autre tableau avec nº de ligne et encapsuler la totalité des colonnes, tableau de tableau, mais cela parait impossible.

    Je me tourne maintenant vers une structure qui inclus le nº de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UneColonne est une Structure
    	tLigne  est un entier
    	tCle  est une chaîne
    	tData est une chaîne
    FIN
    MesColonnes est un tableau de UneColonne

    Mais mon doute est comment sélectionner une colonne d'une ligne?

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    Les amis, je crois que j’ai trouvé une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Colonnes est une Structure
    	LesCol est un tableau associatif de chaînes
    FIN
     
    uCol est Colonnes
    UneLigne est un tableau de Colonnes
     
    uCol.LesCol = [["Col","Data"],["Col2","Data2"],["Col3","Data3"],["Col4","Data4"],["Col5","Data6"],["Col9","Data9"]]
     
    TableauAjoute(UneLigne, uCol)
    TableauAjoute(UneLigne, uCol)
    TableauAjoute(UneLigne, uCol)
    UneLigne[1]:LesCol["Col"] -> "Data"

    De plus je crois que je pourrai ajouter le type de variable pour chaque colonne

  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 441
    Points
    2 441
    Par défaut
    Bonsoir,

    Donc, finalement, dans la ligne des conseils de R&B et de tatayo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UnChamp est une Structure 
       SonNuméroLigne est un entier 
       SaClé est une chaine 
       SesDonnées est un tableau de 0 chaînes
    FIN
     
    MaRécupérationDeRésultats est un tableau de 0 UnChamp
    Un tableau 'simple' devrait rencontrer vos besoins (voir la doc sur Tableau associatif, Tableau fixe et Tableau dynamique). D'après ce que vous indiquez, il n'y a aucune raison d'utiliser un tableau associatif.

    Comme vous ne connaissez ni le nombre de champs, ni le nombre de colonnes pour chaque champ, vous allouez 0 éléments dans la déclaration de votre tableau MaRécupérationDeRésultats puis vous procédez par TableauAjoute (ou TableauAjouteLigne, mais c'est la même chose dans le cas présent puisque vous avez un tableau à une dimension)
    C'est le même raisonnement pour le tableau SesDonnées : vous ne connaissez pas le nombre de résultats (ou colonnes) par ligne et donc vous démarrez avec un tableau vide que vous remplissez à coups de TableauAjoute.

    Pour retrouver une ligne, soit l'indice du tableau est exploitable directement, soit vous effectuez une recherche sur le membre SonNuméroLigne ou SaClé avec TableauCherche qui vous donnera l'indice correspondant à la ligne recherchée.
    Ensuite, vous pouvez parcourir le tableau des données de la ligne : MaRécupérationDeRésultats[Indice].SesDonnées ou y effectuer une autre recherche, etc.

    J'espère qu'avec ces explications, vous pourrez y arriver.

    Hemgé

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    Oui, c'était la bonne voie. Merci à tous.
    Ce qui me bloquait c'est l’impossibilité de faire un tableau de tableau.
    Mais avec la possibilité de créer un tableau de structure, comme cette structure peut contenir des tableaux, plus de problème.
    L’utilisation du tableau associatif était nécessaire car je doit communiquer par socket avec un hardware qui oblige cette structure, qui est un ARRAY très commun sous linux (C,PHP).

    Je suis d’ailleurs en pleine bataille avec les sockets Windev.
    Par exemple je voudrai connaitre les sockets actifs/connecté, énumérer.


    Mon problème est que j'utilise Windev rarement, 1 ou 2 fois par an, et à chaque fois c'est dur de reprendre.
    Grâce à l'aide de tous les participants de ce forum, je peux gagner pa mal de temps

    Merci à vous tous.

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    Une bonne nouvelle sur ce sujet:

    En version 20, il est maintenant possible d'imbriquer directe-
    ment des types conteneurs (tableaux, tableaux associatifs, ta-
    bleaux fixes, files, piles et listes) entre eux sans avoir à déclarer
    de structures intermédiaires.
    Toutes les combinaisons d’imbrications sont possibles:
    • tableau de tableaux
    • tableau de tableaux associatifs
    • tableau associatif de tableaux
    • tableau de files
    • tableau de piles
    • ...
    La déclaration s’effectue maintenant en 1 ligne !
    t
    est un tableau de tableaux d’entiers
    Gain apporté par cette nouveauté version 20:
    Inutile de déclarer des structures intermédiaires

Discussions similaires

  1. [MySQL] array intersect php
    Par Baldric de Dol dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/10/2008, 18h27
  2. Passer un array de PHP vers Flash
    Par ok07 dans le forum Flash
    Réponses: 3
    Dernier message: 18/02/2007, 10h02
  3. [Tableaux] Array et PHP
    Par kagura dans le forum Langage
    Réponses: 16
    Dernier message: 27/07/2006, 12h34
  4. [Tableaux] array intersect php
    Par lafracas dans le forum Langage
    Réponses: 1
    Dernier message: 09/06/2006, 21h21
  5. [Type] alternative a "array of byte"
    Par Clorish dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2005, 11h59

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