Connaitre le nombre d'arguments (ProgramParameter)

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Connaitre le nombre d'arguments (ProgramParameter)

Message par Dr. Dri »

comme en C avec l'argc... ce serait assez pratique...

Dri
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Une petite boucle et un petit tableau ? :D
Vive le thread-safe !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah justement si je veux mettre ca dans un tableau je ne peux pas deviner sa taille...

Dri
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Faut faire ça avec une LinkedList. Mais c'est vrai que ça serait cool qu'ils soient en mémoire et pas gérés de cette façon...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Et voilou :)

Code : Tout sélectionner

Procedure.l GetArguments()
  Protected Total.s, Current.s, cpt.l, i.l
  Current = ProgramParameter()
  While Current <> ""
    Total + Current + Chr(9)
    cpt + 1
    Current = ProgramParameter()
  Wend

  If cpt = 0
    ProcedureReturn 0
  EndIf

  Dim Args.s(cpt)

  For i = 1 To cpt
    Args(i - 1) = StringField (Total,i,Chr(9))
  Next
  
  ProcedureReturn cpt
EndProcedure

Debug GetArguments()
Debug Args(0)
Debug Args(1)
Vive le thread-safe !
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Oui sous forme de ExamineParameters() qui retournerait le nombre de paramètres passés puis NextParameter() qui retournerait le paramètre.

Qu'en pensez-vous ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

moi je fais comme çà, je trouve çà pratique (pas de global, pas de tableau, pas de liste) mais la technique tableau/liste est bien aussi :

Code : Tout sélectionner

Procedure.l GetArgC(sep.s)
  
  Shared _arg.s, _sep.s
  
  _sep.s = sep
  
  Repeat
    a$ = ProgramParameter()
    If a$
      _arg + a$ + _sep
    Else
      Break
    EndIf
  ForEver
  
  ProcedureReturn CountString(_arg,_sep)
  
EndProcedure
Procedure.s GetArgV(index.l)
  
  Shared _arg.s, _sep.s
  
  ProcedureReturn StringField(_arg,index,_sep)
  
EndProcedure

For i=1 To GetArgC(",")
  Debug GetArgV(i)
Next
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

gangsta, c'est vrai que vu comme çà c vraiment plus propre, regardez :

Code : Tout sélectionner

; proposition
If ExamineParameter()
  While NextParameter()
    Debug GetParameter()
  Wend
EndIf

; actuellement
Repeat
  a$ = ProgramParameter()
  If a$
    Debug a$
  EndIf
Until a$=""
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

en attendant si on faisait comme si :

Code : Tout sélectionner

Procedure.l ExamineParameter()
  
  Structure _ARGS
    i.l
    c.l
    v.s[32]
  EndStructure
  
  Shared _arg._ARGS
  
  For i=0 To 32
    
    a$ = ProgramParameter()
    
    If a$
      _arg\v[i] = a$
    Else
      _arg\c = i : Break
    EndIf
    
  Next
  
  ProcedureReturn _arg\c

EndProcedure
Procedure.b NextParameter()
  
  Shared _arg._ARGS
  
  _arg\i + 1
  
  If _arg\i < _arg\c
    ProcedureReturn #True
  EndIf
  
EndProcedure
Procedure.s GetParameter()
  
  Shared _arg._ARGS
  
  ProcedureReturn _arg\v[_arg\i]
  
EndProcedure

If ExamineParameter()
  While NextParameter()
    Debug GetParameter()
  Wend
EndIf
Image
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

C'est pas pratiqye ton dernier exemple car on peut pas revenir en arrière.
Ca serait mieux le meme systeme qu'en C, cad que le programme garde tout dans un tableau ou (liste) et qu'on puisse y accéder directement avec GetArg(index) et CountArg()...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

pas pratique mais pratique pour gansta93...
sinon une dernière proposition, de toutes facons c à la portée de tt le monde... chacun fait sa sauce. :twisted:

Code : Tout sélectionner

Procedure.l GetArgs() 
  
  Structure _ARGS 
    a.l:c.l:v.s[32] 
  EndStructure 
  
  Shared _arg._ARGS 
  
  For i=0 To 32
    
    _arg\v[i] = ProgramParameter() 
    
    If _arg\v[i] = ""
      Break 
    EndIf
    
    _arg\c = i
    
  Next
  
  _arg\a = 1

  ProcedureReturn _arg\c
  
EndProcedure
Procedure.l GetArgC() 
  
  Shared _arg._ARGS 
  
  If _arg\a
    ProcedureReturn _arg\c
  Else
    ProcedureReturn GetArgs()
  EndIf
  
EndProcedure
Procedure.s GetArgV(i.l) 
  
  Shared _arg._ARGS 
  
  ProcedureReturn _arg\v[i]
  
EndProcedure

For x=0 To GetArgC()
  Debug GetArgV(x) 
Next

For x=0 To GetArgC()
  Debug GetArgV(x) 
Next
Image
Répondre