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

ASP Discussion :

nombre d'arguments inconnus pour une function ou sub


Sujet :

ASP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut nombre d'arguments inconnus pour une function ou sub
    Bonjour,

    Après quelques recherches infructueuses, et en espèrant être sur le bon forum. Voici mon problème :

    Est-il possible de déclarer une fonction (function ou sub) sans préciser le nombre d'argument qu'elle attend.
    Le but étant de pouvoir appeler cette fonction avec un nombre d'arguments différents selon les cas.

    Les arguments que je veux envoyer à la fonction vont par paire, ce sont des couple (NomParametre, ValeurParametre)

    Pour chaque couple j'ai le même bout de script à effectuer à l'interieur de la fonction.

    Actuellement j'ai fait une fonctions à 20 arguments (10 couples NomParametre, ValeurParametre)

    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
    function MaFonction(NomParam1, ValParam1, NomParam2, ValParam2, NomParam3, ValParam3, etc...)
    '... du code avant...
     
    ' voici le code commun que j'effectue (il s'agit de transformation xml/xsl) : 
    	xslProc.addParameter NomParam1, ValParam1
    	xslProc.addParameter NomParam2, ValParam2
    	xslProc.addParameter NomParam3, ValParam3
    	xslProc.addParameter NomParam4, ValParam4
    	xslProc.addParameter NomParam5, ValParam5
    	xslProc.addParameter NomParam6, ValParam6
    	xslProc.addParameter NomParam7, ValParam7
    	xslProc.addParameter NomParam8, ValParam8
    	xslProc.addParameter NomParam9, ValParam9
    	xslProc.addParameter NomParam10, ValParam10
     
    '... du code après...
    end function
    Il m'arrive d'avoir en effet 10 paramètres à envoyer, mais la plupart du temps je n'en ai que 3 ou 4... J'envois alors des paramètres vides !

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Call MaFonction("LoginID",Session("LoginID"),"XPath",XPath,"focus",focus,"param4","","param5","","param6","","param7","","param8","","param9","", "param10","")
    Bref, c'est lourd !

    Quelqu'un aurait-il une idée ? ou encore mieux un exemple
    Ou est ce tout simplement impossible ?

    d'avance merci.

    PS : je suis en asp avec VBScript (<%@ Language=VBScript %>)

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et si tu passes à ta fonction une seule variable qui serait un tableau à deux dimensions ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    J'ai essayer cette solution mais sans succès.

    j'ai fait un test simple avec le code suivant :
    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
     
    sub test(nomParam0,valParam0, nomParam1,valParam1)
    	response.write "nomParam0 : " & nomParam0
    	response.write "valParam0 : " & valParam0
    	response.write "nomParam1 : " & nomParam1
    	response.write "valParam1: " & valParam1
    end sub
     
    Dim ArrayParamListe2Dim(1,1)
    ArrayParamListe2Dim(0,0)="NomParam0"
    ArrayParamListe2Dim(0,1)="valParam0"
    ArrayParamListe2Dim(1,0)="NomParam1"
    ArrayParamListe2Dim(1,1)="valParam1"
     
    call test(ArrayParamListe2Dim)
    et j'obtiens l'erreur :
    Nombre d'arguments ou affectation de propriété incorrects: 'test'
    Je me suis dit que finalement le tableau devait avoir 1 dimension, en essayant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ArrayParamListe1Dim(3)
    ArrayParamListe1Dim(0)="NomParam0"
    ArrayParamListe1Dim(1)="valParam0"
    ArrayParamListe1Dim(2)="NomParam1"
    ArrayParamListe1Dim(3)="valParam1"
     
    call test(ArrayParamListe1Dim)
    mais j'ai la même erreur....

    c'est bien dommage car justement l'ensemble de mes paramètres était passé pas querystring à la page asp et était donc déjà sous forme de tableau.
    ...qu'il aurait fallu redimensionner tout de même... pas évident non plus en fait...

    Du moins ça aurait été un moyen de contourner le problème qui m'a amené à poser ma question.

    J'ai donc bien l'impression qu'on ne peut pas passer un nombre d'argument inconnu à une fonction.

    Je pense que je vais m'orienter vers ce q'il y a de plus simple à savoir ne pas faire appel à la fonction mais faire un copié collé des instructions qu'elle contient en faisant une boucle à l'endroit où il faut passer les N paramètres...

    Merci de la suggestion en tout cas, et si quelqu'un a d'autres éclaircissement sur le sujet , je suis preneur, ça me permettra de faire qqchose de plus propre par la suite.

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Pour redimensionner dynamiquement une variable tableau tu peux faire un

    Dans ta sub test, il ne doit y avoir qu'un paramètre qui recevra le contenu de ArrayParamListe2Dim

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    ok ça y est je crois que je viens de comprendre... (un peu long à la détente )

    en fait j'envois le tableau 2 dimension des paramètres et je le récupère en tant que tableau dans la sub, il me suffit alors de boucler de i=0 à Ubound du tableau (et j=0 à 1 pour les couples {paramNom, valParam}) à l'intérieur même de la sub !

    Je peux ansi envoyer un nombre de paramètre parfaitement variable.
    Je n'ai dans ce cas pas besoin de redimensionner ma querystring en plus !

    yes ! je vais essayer ça tout de suite,

    Merci!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    ça y est j'ai fait la fonction en question.
    Je l'a mets ci dessous si ça interesse quelqu'un.

    Il me reste juste un problème pour passer Response.QueryString en tant qu'argument. En fait Response.QueryString est un objet de type collection et la fonction accepte un objet de type Array, donc ça ne marche pas... erreur "type imcompatible"

    Mais là c'est un autre sujet, le premier est résolu. Mais j'en profite pour demander si quelqu'un sait comment convertir une collection en array.
    (cas particulier d'une collection de la dimension d'une queryString vers une arrayde dimension (N,1) )
    Je n'ai pas trouver grand chose à ce sujet. J'ai trouvé ça mais apparement c'est pour .net


    Voici la fonction en question. Elle permet de faire une transformation xml/xsl en envoyant un nombre inconnu de paramètre à la xsl :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    function objTransformXMLXSL(xmlPath, xslPath, ArrParams)
    	' ArrParams est un tableau à 2 dimension avec N lignes et 2 colonnes
    	' Exemple de déclaration : 
    	' Dim ArrParams(N,1)	'==> 3 dimension ça ferait ArrParams(a,b,c)
    	'ArrParams(0,0)="NomParam0"
    	'ArrParams(0,1)="ValParam0"
    	'ArrParams(1,0)="NomParam1"
    	'ArrParams(1,1)="ValParam1"
    	'ArrParams(2,0)="NomParam2"
    	'ArrParams(2,1)="ValParam2"
    	'... etc
    	'ArrParams(N,0)="NomParamN"
    	'ArrParams(N,1)="ValParamN"
    	' on fera la boucle d'ajout des paramètres sur i (0à N) et on récupèrera NomParam(i) =  ArrParams(i,0) et ValParam(i) =  ArrParams(i,1)
     
     
    ' XMLDOM_PROGID et XMLDOM_PROGID sont des constantes déclarées ailleurs et dépendent du parser xml utilisé.
    'j'utilise  : 
    'const XMLDOM_PROGID = "MSXML2.FreeThreadedDOMDocument"
    'const XSLT_PROGID ="Msxml2.XSLTemplate"
     
    	Dim objXML, objXSL
    	set objXML= Server.CreateObject(XMLDOM_PROGID)
    		objXML.async = false
    		objXML.load xml
    	set objXSL= Server.CreateObject(XMLDOM_PROGID)
    		objXSL.async = false
    		objXSL.load xsl
     
    	Dim xslt, xslProc
    		Set  xslt = server.CreateObject(XSLT_PROGID)
    		xslt.stylesheet = objXSL
    		Set xslProc = xslt.createProcessor()
    		xslProc.input = objXML
     
    	Dim xslt, xslProc
    		Set  xslt = server.CreateObject(XSLT_PROGID)
    		xslt.stylesheet = objXSL
    		Set xslProc = xslt.createProcessor()
    		xslProc.input = objXML
     
    	Dim i, j
    	for i=0 to UBound(ArrParams,1)	'=N en fait
    	'UBound(ArrParams,X) : renvois la Xieme dimension du tableau 
    	' ex : si ArrParams(a,b,c), UBound(ArrParams,1)=a, UBound(ArrParams,2)=b et UBound(ArrParams,3)=c
    		xslProc.addParameter Cstr(ArrParams(i,0)), Cstr(ArrParams(i,1))
    		'response.write "i=" & i & "<br/>"
    		'response.write "ArrParams(i,0)=" & ArrParams(i,0)& "<br/>"
    		'response.write "ArrParams(i,1)=" & ArrParams(i,1)& "<br/>"
    	next
     
    	xslProc.Transform
    	objTransformXMLXSL=xslProc.output
     
    	Set objXML=Nothing
    	Set objXSL=Nothing
    	Set xslt=Nothing
    	Set xslProc=Nothing	
    End function

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

Discussions similaires

  1. Timeout pour une function
    Par speedy_g dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2009, 12h04
  2. Nombre d'enregistrements maximums pour une listbox
    Par Zenerox dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/12/2008, 17h17
  3. Réponses: 4
    Dernier message: 15/10/2008, 16h26
  4. Nombre de paramètres variables pour une procédure [SQLSERVER2005]
    Par chti_vince dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/07/2007, 11h59
  5. Nombre max d'utilisateurs pour une base de données
    Par romrai dans le forum Access
    Réponses: 18
    Dernier message: 10/07/2006, 16h28

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