Connaitre le nombre d'arguments (ProgramParameter)
Connaitre le nombre d'arguments (ProgramParameter)
comme en C avec l'argc... ce serait assez pratique...
Dri
Dri
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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 !
Participez à son extension: ajouter vos programmes et partagez vos codes !
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 !
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
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$=""
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
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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()...
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 !
Participez à son extension: ajouter vos programmes et partagez vos codes !
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.
sinon une dernière proposition, de toutes facons c à la portée de tt le monde... chacun fait sa sauce.

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