[R] Identifier les colonnes dans un tableau 2D

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

[R] Identifier les colonnes dans un tableau 2D

#1

Message par lerin57 »

Bonjour,

Je vais tenter d'exprimer mon besoin au travers d'un exemple très simple.

A partir d'un fichier contenant des valeurs séparées par des virgules, je désire renseigner les valeurs de 3 Champs de controles dans une gui.

contenu du fichier (que l'on nommera ici données.csv)
► Afficher le texte
Le caractere de séparation ici doit demeurer la virgule.

voici maintenant mon code :
► Afficher le texte
Dans le champs $CmbSupport, qui ici sera une liste, il me faut renseigner la première colonne du fichier Données.csv.

Puis la fonction _choix() fait son apparation.

Le but étant ici de dire que si je choisie par exemple dans la liste le groupe grp02, le champ $Email recevra automatiquement la valeur grp02@test.com, et le champ $Model recevra la valeur grp02.html.

Je tiens à préciser quelques détails :

J'ai déja crée le type de condition présent dans la fonction _choix(), mais ce, uniquement par l'utilisation de variables préétablie dans le code.

Je pense avoir compris à peu près le principe des tableaux 1D et 2D, ainsi que l'utilisation d'une boucle For ... to ....Next.


Ici, mon plus gros probleme demeure à identifier les colonnes et créer des requetes sur les cellules de mon tableau virtuel.

On m'a déja conseillé de passer par un fichier sql, toutefois, vous l'aurez remarqué, vu ma difficulté à trouver une solution paraissant aussi simple (au vue de tous les exemple autrement plus complexe que j'ai trouvé dans ce forum), je ne peut pas encore m'aventurer sur ce terrain.

Je vous remercie par avance pour vos suggestions.
Modifié en dernier par lerin57 le sam. 26 juin 2010 14:11, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Identifier les colonnes dans un tableau 2D

#2

Message par Tlem »

Bien que la solution SQLite semble la plus simple à mettre en œuvre :wink: , pour faire ce que vous cherchez avec un tableau, il y à plusieurs approches possibles.

Je vais aborder celle qui me semble la plus 'simple' à mettre en œuvre.
La première étape va consister à construire votre tableau 2D avec le fichier CVS. Pour cela, deux solutions principales :
1 - Lire le fichier ligne après ligne tout en construisant le tableau.
2 - Lire le fichier directement dans un tableau.

Bien que la solution 1 soit plus directe, il faut quoi qu'il en soit connaitre le nombre de ligne du fichier afin de créer les dimensions du tableau 2D (avec _FileCountLines par exemple) puis de lire de nouveau le fichier ligne par ligne afin de remplir le tableau (ce qui fait que le fichier est lu 2 fois :cry: ).
Je vais donc aborder la deuxième solution qui présente elle aussi un inconvénient, mais moindre, c'est de passer par un tableau intermédiaire, mais celui-ci permettra de connaitre le nombre d'élément (lignes) plus rapidement et surtout de continuer le travail en mémoire sans avoir besoin de re-lire le fichier. ;)

Pour cela vous devrez utiliser la fonction _FileReadToArray.
Celle-ci va placer chaque ligne de votre fichier dans une ligne du tableau.
A ce stade nous n'avons encore qu'un tableau 1D. :mrgreen:

Bien, puis que vous connaissez le principe de la boucle For/Next, vous devrez ensuite lire ce tableau ligne par ligne afin de construire votre tableau final en 2D.
L'élément 0 de votre tableau 1D vous donne le nombre d'élément total de celui-ci, donc utilisez cette information pour créer les dimensions de votre futur tableau 2D et pour lire votre tableau 1D de l'élément 1 au dernier élément.

Chaque élément du tableau aura pour donnée une ligne entière de votre fichier CSV, donc en utilisant la commande StringSplit sur cette ligne (avec la virgule pour séparateur), vous allez vous retrouver avec un mini tableau de quatre éléments.
L'élément 0 contiendra le nombre total d'éléments du tableau (sans l'élément 0 ;)) soit 3, tandis que les éléments 1, 2 et 3 contiendront vos trois valeurs à utiliser.

De suite après cette commande StringSplit, il vous suffit d'attribuer les trois valeurs de votre mini tableau à votre tableau 2D jusqu'à la fin de la lecture du tableau 1D.

J'espère que vous avez suivit jusque là. :lol:
Si oui, alors ce qui vient de vous prendre quelques minutes à comprendre, se fera en l'espace d'une fraction de seconde pour AutoIt.
Vous vous retrouvez donc avec un tableau 2D de trois colonnes contenant vos données comme dans votre tableur. ;)
A partir de là, vous pouvez faire ce que vous voulez. Entre autre, puisque vous le demandez, il vous suffira de lire ce tableau dans une boucle For/Next sur la colonne 1 pour peupler votre ComboBox. ;)

Pour connaitre le résultat du choix de la ComboBox, utilisez par exemple la fonction _GUICtrlComboBox_GetCurSel qui vous retournera l'index de la sélection. Cet index vous permettra de connaitre la ligne du tableau concerné et donc de lire les valeurs des 'cellules' pour les attribuées à vos contrôles.

Voilà. J'espère que cela vous paraitra clair et vous aidera dans l'élaboration de votre code.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Identifier les colonnes dans un tableau 2D

#3

Message par lerin57 »

Bonsoir, Tlem

Je vous remercie d'avoir prit le temps d'étudier ce probleme (je suppose d'autant plus que ce type de requête est récurrente).

Je reprend juste votre explication pour vérifier si j'ai bien compris :

- utiliser mon fichier existant au format csv
- déclarer au préalable un premier tableau virtuel dans une variable re-définnissable
- l'integrer dans un tableau virtuel à l'aide de la fonction _filereadtoarray()

Jusqu'ici pas de probleme, mais je manque encore de jujotte, pour le reste

- utiliser une boucle pour "séparer" les éléments de chaques lignes dans ce tableau, en la combinant avec stringsplit

j'ai remarqué effectivement que la fonction stringsplit permettait de séparer les valeurs en se basant sur le symbole choisie pour la séparation.

J'ai du mal à ce niveau, vous m'avez indiquer que l'element 0 contiendra le nombre total d'élément, par cette définition, est ce que vous entendez le nombre de lignes :?: :| , ou le nombre de valeurs.

A ce titre, je peux effectivement utiliser la fonction _filecountline(), afin de définir le "calcul" dans la boucle en ajoutant -1 au compteur, mais je m'egare peut-etre de votre explication.

Je vais effectuer quelques tests à tatons.

Je sais que je vous demande beaucoup, mais si vous pouvez m'orienter encore un peu, je vous en remercie par avance.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Identifier les colonnes dans un tableau 2D

#4

Message par Tlem »

Afin que nous gagnions tous les deux du temps :roll: , essayez ceci sur votre fichier CSV :
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Identifier les colonnes dans un tableau 2D

#5

Message par lerin57 »

Bonsoir,

Code : Tout sélectionner

Global $aTableau2[$aTableau1[0]][4] ; Préparation tableau2
:arrow: :oops:

Je commence à saisir.

Je vais tester et adapter.

bon, je me doute de passer pour un gros ignare, car je sais que vous passez beaucoup de temps à aider les utilisateurs sur ce forum, sur ce type de question (redondante, j'imagine)

Je vous remercie une fois de plus.

Je teste et je revient vite, avec j'espère une bonne conclusion.
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Identifier les colonnes dans un tableau 2D

#6

Message par lerin57 »

Bonjour,

La solution a été testé avec succés.

Encore merci a Tlem pour sa patience et son aide.

Je clôt le post.
Répondre