Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 24-08-2007 07:12:22

Tron  
Membre Geek
Award: tron
Lieu: Antony
Date d'inscription: 25-07-2007
Messages: 35
Pépites: 1,419
Banque: 590,314,860,104

[ASTUCE] Tips Tableau

Bonjour

Une astuce PowerBuilder concernant les tableaux et les appels de fonctions.

Il est possible de déclarer un tableau et de l’initialiser :

Code: pb

String ls[] = {'hello', 'la', 'planète'}


Il est également possible de déclarer une fonction ayant un argument de type tableau est de l’appeler comme cela :

Code: pb

F( ls[] )


Le truc, c’est que l’on peut aussi le faire comme ceci :

Code: pb

F({'hello', 'la', 'planète'} )


Encore plus étonnant, on peut aussi appeler une fonction sur les éléments du tableau …

Code: pb

F({Upper('hello'), Lower('la'), 'planète'} )


Intéressant, non ?

A+

Hors ligne

 

#2 24-08-2007 07:57:47

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [ASTUCE] Tips Tableau

00 pépites,

Tron a écrit:

Encore plus étonnant, on peut aussi appeler une fonction sur les éléments du tableau …

Code: pb

F({Upper('hello'), Lower('la'), 'planète'} )

pas si étonnant que ça quand tu déclares un tableau explicitement (avec {}) la syntaxe est

tableau = { expression1, expression2, .... , expressionN }

où les expressions comportent tout ce qui est autorisé en terme de variables, appels de fonctions, objets... dans la mesure où le type de l'expression est le même que celui du tableau


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 02-11-2007 08:56:50

Tron  
Membre Geek
Award: tron
Lieu: Antony
Date d'inscription: 25-07-2007
Messages: 35
Pépites: 1,419
Banque: 590,314,860,104

Re: [ASTUCE] Tips Tableau

Hello,

Un exemple d'application de l'astuce précédente, l'instruction IN que l'on trouve par exemple en SQL : select ... from.... where macolonne in ( 10, 20, 30)

Elle n'existe pas en powerScript (seulement dans les expressions des dw ...)

mais on peut la remplacer par une fonction globale f_In et écrire quelque chose comme ça :

if f_IN( ls, {'aaaaa', 'bbb', lower('Cc'), "D"} ) then

au lieu de :

if ls = 'aaaaa' OR ls = 'bbb', OR ls = lower('Cc') or ls = "D"

La fonction f_in (any aa_valeur, any aa_liste_argument[]) est très simple elle retourne TRUE si une valeur aa_valeur existe dans le tableau aa_liste_argument[]...

A+

Hors ligne

 

#4 02-11-2007 09:13:29

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [ASTUCE] Tips Tableau



000 pépites

et le code de la fonction f_IN pour la route ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#5 02-11-2007 21:39:20

Tron  
Membre Geek
Award: tron
Lieu: Antony
Date d'inscription: 25-07-2007
Messages: 35
Pépites: 1,419
Banque: 590,314,860,104

Re: [ASTUCE] Tips Tableau

Quelque chose comme ceci...

Code: pb

boolean lb = false
long  ll = 1
long ll_nb

ll_nb = upperBound( aa_liste_argument )
do while ll <= ll_nb and not lb
  if  aa_valeur = aa_liste_argument[ll] then lb = true else ll ++
loop
 
return lb


A+

Dernière modification par Tron (03-11-2007 21:49:23)

Hors ligne

 

#6 03-11-2007 07:49:00

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [ASTUCE] Tips Tableau

return lb 


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 03-11-2007 08:59:06

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [ASTUCE] Tips Tableau

ErAsORz a écrit:

return lb 



et à Tron pour son astuce


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#8 03-11-2007 21:49:51

Tron  
Membre Geek
Award: tron
Lieu: Antony
Date d'inscription: 25-07-2007
Messages: 35
Pépites: 1,419
Banque: 590,314,860,104

Re: [ASTUCE] Tips Tableau

c'est mieux

Hors ligne

 

#9 03-01-2008 20:05:46

Tron  
Membre Geek
Award: tron
Lieu: Antony
Date d'inscription: 25-07-2007
Messages: 35
Pépites: 1,419
Banque: 590,314,860,104

Re: [ASTUCE] Tips Tableau

Hello

Une autre utilisation de cette astuce avec la fonction système OpenWithParm.
Cette fonction permet d’ouvrir une fenêtre en passant un et un seul paramètre.
Malheureusement, la plupart du temps on a plusieurs paramètres à passer …

La 1° idée c’est de passer un tableau et d’écrire quelque chose comme ceci:
openWithParm(w_1, {1,2,3}) , mais cela ne marche pas car le compilateur refuse les tableaux comme paramètres...

La 2° idée consiste à créer une fonction pour écrire qlq chose comme :
openWithParm(w_1, f_sets({1,2,3})). La fonction prend prend un argument de type tableau d'any et le mémorise qlq part...

A l’ouverture de la fenêtre, on récupère les paramètres en passant par une fonction f_get( indice ) qui lie le i° indice du tableau ou l’on a mémorisé les paramètres…

Le problème c’est qu’il faut que les paramètres soient du même type car la syntaxe suivante est refusée par le compilateur.
openWithParm(w_1, f_sets({1, ‘coucou’, now()}))

La 3° idée consiste alors à utiliser une autre fonction f_set( parametre ) qui va mémoriser la valeur passer en paramètre, qui retourne un type accepté par le compilateur et qui permet d’écrire qlq chose comme ceci :
openWithParm(w_1, f_sets({1,f_set( ‘coucou’) ,3})). Le type any n’étant pas typé le compilateur accepte cette syntaxe.!

Pour que cela soit un peu plus propre, on met toutes ces fonctions dans la classe système Message et on obtient :

openWitnParm ( w_1, message.uf_sets( { ‘Bonne année, message.uf_set( 2008 ) } )
dans w_1
messageBox(message.uf_get(1), message.uf_get(2) )

A+

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22