[VBScript] [RESOLU] modifier une fonction dans une boucle

modifier une fonction dans une boucle [VBScript] [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 28-02-2006 à 12:20:15    

bonjour !
 
 
nouveaux petit problème, à propos des fonctions.
hormis le fait que je n'arrive pas à récupérer des variables d'une fonction pour l'utiliser dans une autre (mais soit c'est normal soit je fait mal, mais j'ai pu me débrouiller avec) maintenant je voudrais pour lancer une fonction différente (a un chiffre près) a chaque nouveau passage dans une boucle
 
sans la boucle c'est le même problème je pense
 
 
nomfichasuppr = fichier1(varfichier)    <-- ceci marche normalement et va chercher la variable dans la fonction du meme nom (les 2 fonctions sont en dessous)
 
par contre je voudrais faire quelque chose dans ce genre (dans une boucle):
 
for i = 1 to 2
    nomfichasuppr = fichier & numero & (varfichier)
    numero = numero + 1
next
 
 
function fichier1(varfichier)
       fichier1 = "nomfichier1.txt"
end function
 
function fichier2(varfichier)
       fichier2 = "nomfichier1.txt"
end function
 
 
ainsi, il pourra aller chercher la fonction fichier1 lorsque que "numero" est a 1 et chercher la 2eme lorsqu'il est a 2 !


Message édité par anthony0000 le 28-02-2006 à 15:51:57
Reply

Marsh Posté le 28-02-2006 à 12:20:15   

Reply

Marsh Posté le 28-02-2006 à 13:00:39    

Code :
  1. for i = 1 to 2
  2.     nomfichasuppr = fichier (i, varfichier)   
  3. next i
  4. function fichier(i as Integer, varfichier as String) As String
  5.        fichier = "nomfichier" & i & ".txt"
  6. end function


 
Mais je ne comprends pas trés bien ce que tu veux faire exactement  :??:  
Que contient ta variable "varfichier" ? elle n'est pas utilisée dans ta fonction..


Message édité par Profil supprimé le 28-02-2006 à 13:00:56
Reply

Marsh Posté le 28-02-2006 à 13:11:01    

je pensais juste qu'il fallait faire comme ça ^_^
mais c'est vrai que je ne me suis pas posé la question.
 
sinon je voulais utiliser ça pour choisir un fichier different a chaque boucle, donc j'avais fait plusieurs fonctions.
 
est ce possible de faire ça dans une seule fonction? les fichiers n'ont en fait pas du tout le meme nom.
par exemple, dans une boucle en 3, je vais chercher le fichier 1 qui s'appelle "test.txt", puis je fait un traitement dessus (ça ça contionne), a la fin du traitement, la boucle reviens et va chercher le 2eme fichier qui s'appelle "truc.chose" etc...

Reply

Marsh Posté le 28-02-2006 à 13:11:44    

mais ç'est vrai que je n'ai pas besoin de la variable varfichier
 
ah
 et ce que j'ai oublié de dire est que je sépare le nom du fichier de son extension, et que je vais les chercher chacuns dans une fonction differente.
je peux les mettre dans la meme fonction ? pour ensuite aller les chercher en meme temps ?

Message cité 1 fois
Message édité par anthony0000 le 28-02-2006 à 13:13:13
Reply

Marsh Posté le 28-02-2006 à 13:16:06    

anthony0000 a écrit :

je pensais juste qu'il fallait faire comme ça ^_^
mais c'est vrai que je ne me suis pas posé la question.
 
sinon je voulais utiliser ça pour choisir un fichier different a chaque boucle, donc j'avais fait plusieurs fonctions.
 
est ce possible de faire ça dans une seule fonction? les fichiers n'ont en fait pas du tout le meme nom.
par exemple, dans une boucle en 3, je vais chercher le fichier 1 qui s'appelle "test.txt", puis je fait un traitement dessus (ça ça contionne), a la fin du traitement, la boucle reviens et va chercher le 2eme fichier qui s'appelle "truc.chose" etc...


Si tu souhaites entrer les noms des fichiers en dur dans l'application :

Code :
  1. for i = 1 to 2
  2.     nomfichasuppr = fichier (i)
  3. next i
  4. function fichier(i as Integer) As String
  5.     Select Case i
  6.        Case 1
  7.            fichier = "toto" & ".txt"
  8.        Case 2
  9.            fichier = "test" & ".mp3"
  10.        Case 3
  11.            fichier = "titi" & ".toto"
  12.     End Select     
  13. end function


 

Reply

Marsh Posté le 28-02-2006 à 13:25:50    

ok, je comprends comment ça peut marcher
 
par contre, je dois continuer de separer les noms des extensions ^_^
 
 
 
Si tu souhaites entrer les noms des fichiers en dur dans l'application :  
 
 
Code :
 
for i = 1 to 2
    nomfichasuppr = fichier (i)
next i  
 
 function fichier(i as Integer) As String
    Select Case i  
      Case 1
           fichier = "toto"
           extension = "txt"
       Case 2
           fichier = "test"
           extension = "mp3"
       Case 3
           fichier = "titi"
           extension = "toto"
    End Select
 end function  
 
 
 
je pense que j'ai saisi mais je ne comprends pas comment faire du genre :
 
for i = 1 to 2
    nomfichasuppr = fichier (i)
    extensionfichier = fichier(i)
next i
 
mais je pense que comme ça ça ne marchera pas ?

Reply

Marsh Posté le 28-02-2006 à 13:26:34    

anthony0000 a écrit :

mais ç'est vrai que je n'ai pas besoin de la variable varfichier
 
ah
 et ce que j'ai oublié de dire est que je sépare le nom du fichier de son extension, et que je vais les chercher chacuns dans une fonction differente.
je peux les mettre dans la meme fonction ? pour ensuite aller les chercher en meme temps ?


Bien sûr  :)  
 

Code :
  1. for i = 1 to 2
  2.    nomfichasuppr = fichier (i)
  3.    erreur = Supprime(nomfichierasuppr)
  4.    If erreur <> 0 Then
  5.       MsgBox "Impossible de supprimer le fichier : " & nomfichierasuppr & " !"
  6.    End If
  7. next i
  8. __________________________________________
  9. Function Supprime(nomfichier as string) as Integer
  10. On error Goto GestionErreur
  11.    'code pour supprimer le fichier
  12.    Supprime = 0
  13.    On error Goto 0
  14.    Exit Function
  15. GestionErreur:
  16.    Supprime = Err.Number
  17. End Function


Message édité par Profil supprimé le 28-02-2006 à 13:27:21
Reply

Marsh Posté le 28-02-2006 à 13:30:20    

anthony0000 a écrit :

ok, je comprends comment ça peut marcher
 
par contre, je dois continuer de separer les noms des extensions ^_^
 
 
 
Si tu souhaites entrer les noms des fichiers en dur dans l'application :  
 
 
...
 
je pense que j'ai saisi mais je ne comprends pas comment faire du genre :
 
for i = 1 to 2
    nomfichasuppr = fichier (i)
    extensionfichier = fichier(i)
next i
 
mais je pense que comme ça ça ne marchera pas ?


 

Code :
  1. for i = 1 to 3
  2.     nomfichasuppr = fichier (i) & "." & extension (i)
  3. next i
  4. function fichier(i as Integer) As String
  5.     Select Case i
  6.        Case 1
  7.            fichier = "toto"
  8.        Case 2
  9.            fichier = "test"
  10.        Case 3
  11.            fichier = "titi"
  12.     End Select     
  13. end function
  14. function extensionficher(i as Integer) As String
  15.     Select Case i
  16.        Case 1
  17.            fichier = "txt"
  18.        Case 2
  19.            fichier = "doc"
  20.        Case 3
  21.            fichier = "jpg"
  22.     End Select     
  23. end function

Reply

Marsh Posté le 28-02-2006 à 13:31:59    

ah, 2 choses :
 
je me suis mal expliqué, meme si c'est vrai que c'est par rapport à des fichiers que je veux supprimer, j'utilise WMI pour les supprimer (pour faire la recherche sur tout le dur pour les supprimer).
et donc j'ai besoin de lui indiquer le nom et l extension.
 
et je voudrais savoir (parce que je ne maitrise pas encore les fonction parfaitement) comment recuperer 2 variables dans une fonction
 
mais ici, je ne pense pas que ça fonctionne.
 
for i = 1 to 2  
    nomfichasuppr = fichier (i)  
    extensionfichier = fichier(i)  
next i  
 
 
 function fichier(i as Integer) As String  
    Select Case i  
      Case 1  
           fichier = "toto"  
           extension = "txt"  
       Case 2  
           fichier = "test"  
           extension = "mp3"  
       Case 3  
           fichier = "titi"  
           extension = "toto"  
    End Select  
 end function    
 
 
 
 

Reply

Marsh Posté le 28-02-2006 à 13:32:41    

jsuis bete, c'est vrai que je pouvais faire pareil avec l extension ^_^

Reply

Marsh Posté le 28-02-2006 à 13:32:41   

Reply

Marsh Posté le 28-02-2006 à 13:37:39    

ah mince, je viens de penser à autre chose
 
je suis obligé d'avoir autant de fonctions que de fichier
 

Reply

Marsh Posté le 28-02-2006 à 13:39:26    

anthony0000 a écrit :

ah mince, je viens de penser à autre chose
 
je suis obligé d'avoir autant de fonctions que de fichier


Pourquoi donc ?

Reply

Marsh Posté le 28-02-2006 à 13:41:46    

raison :  
 
j'ai 2 script, l'un demande les noms des fichiers, et les ecris à la fin de la 2eme fonction sous forme de fonction, je ne sais pas combien il peut y avoir de fichier donc je ne peux pas ecrire de select case

Reply

Marsh Posté le 28-02-2006 à 13:42:59    

sinon, je pense qu'il faudrait que je change ma manière d'écrire les noms des fichiers saisis dans le 1er script pour les ecrire dans le 2eme script
mais a chaque fois qu'un fichier est saisi, je lance la fonction qui permet d'ecrire le fichier sous forme de fonction (pour etre réutilisable) à la fin du 2eme script


Message édité par anthony0000 le 28-02-2006 à 13:51:18
Reply

Marsh Posté le 28-02-2006 à 13:57:00    

Déclare un tableau à deux dimensions en variable globale
 
Dim Tableau(2,0) as String
 
 
Et à chaque fois que tu dois ajouter un nouveau fichier :
 
Redim Preserve Tableau(2,Ubound(Tableau(2)+1)
Tableau(1,Ubound(Tableau(2)) = "MonFichier"
Tableau(2,Ubound(Tableau(2)) = "MonExtension"
 
 
Et ensuite tu fait ta boucle sur tous les élements du tableau.
Dans Tableau(1,i) tu as le nom de ton fichier
Et dans Tableau(2,i) tu as l'extension associée.

Reply

Marsh Posté le 28-02-2006 à 14:05:22    

ouh, ça se complique pour moi ^_^
 
je viens d'avoir un début d'idée mais avant tout je voulais savoir, en vbscript si j'ecris les variable comme "as string", ça ne fonctionne pas, il reconnait pas, donc je ne suis pas obligé de mes mettre.
malheureusement, d'habitude je comprend un peu comment ça fonctionne lorsqu'on m'aide mais là, j'avoue que je pense que je vais me perdre.
 
l'autre chose est que en reflechissant, et en tirant les ficelles, il y a peu etre moyen d'utiliser le select case :
 
il suffit que j'ecrive dans le fichier (et AVANT la saisie des noms) le debut de la fonction genre :
 
function fichier(i)
    Select Case i  
 
qu'ensuite j'écrive a chaque fois qu'un nom est saisi :
 Case var <-- ici en variable mais qui deviendra 1 ou 2 etc dans le fichier ecrit  
           fichier = "toto"  
           extension = "txt"  
 
 
et apres la fin de la saisie, je j ecris la fermeture de la fonction :
 
End Select  
 end function    

Reply

Marsh Posté le 28-02-2006 à 14:08:36    

désolé si j'ai l'air de "cracher" sur ta dernière soluce, je m'y pencherais mais lorsque j'aurai fait un script fonctionnel (pour l'optimisation)

Reply

Marsh Posté le 28-02-2006 à 14:09:54    

anthony0000 a écrit :

ouh, ça se complique pour moi ^_^
 
je viens d'avoir un début d'idée mais avant tout je voulais savoir, en vbscript si j'ecris les variable comme "as string", ça ne fonctionne pas, il reconnait pas, donc je ne suis pas obligé de mes mettre.
malheureusement, d'habitude je comprend un peu comment ça fonctionne lorsqu'on m'aide mais là, j'avoue que je pense que je vais me perdre.
 
l'autre chose est que en reflechissant, et en tirant les ficelles, il y a peu etre moyen d'utiliser le select case :
 
il suffit que j'ecrive dans le fichier (et AVANT la saisie des noms) le debut de la fonction genre :
 
function fichier(i)
    Select Case i  
 
qu'ensuite j'écrive a chaque fois qu'un nom est saisi :
 Case var <-- ici en variable mais qui deviendra 1 ou 2 etc dans le fichier ecrit  
           fichier = "toto"  
           extension = "txt"  
 
 
et apres la fin de la saisie, je j ecris la fermeture de la fonction :
 
End Select  
 end function

Tu ne peux pas écrire des bouts de code à la volée durant l'exécution.
Donc il te reste la solution du tableau, à remplir et redimensionner au fur et à mesure.
désolé  :D  

Reply

Marsh Posté le 28-02-2006 à 14:14:05    

"Tu ne peux pas écrire des bouts de code à la volée durant l'exécution."
 
?? pour quelle raison ?

Reply

Marsh Posté le 28-02-2006 à 14:17:06    

anthony0000 a écrit :

"Tu ne peux pas écrire des bouts de code à la volée durant l'exécution."
 
?? pour quelle raison ?


Ce n'est pas possible en visual basic (et je ne connais pas de language qui permet de le faire).
 
Par exemple : fichier & numero > vb considère cela comme une chaîne de caractères à cause du "&"
 
 
 
EDIT : j'ai une réunion là, donc je te souhaite bon courage ! A bientôt


Message édité par Profil supprimé le 28-02-2006 à 14:18:23
Reply

Marsh Posté le 28-02-2006 à 14:22:35    

alors je ne comprends pas ce qui arrive
ce sont les 3 fonctions qui me servent à écrire dans à la fin du 2eme script
 
[code]
Function ECRIDEBUTFONC
 Set File = fso.OpenTextFile(supprtemp, forAppending, True, ModeAscii)  
  File.WriteLine "function fichier(i)"
  File.WriteLine "Select Case (" & nbFichiersFait + 1 & " )"
  File.Close
End Function
'----------------------------------------------------------------------------------------------------
Function ECRIFINFONC
 Set File = fso.OpenTextFile(supprtemp, forAppending, True, ModeAscii)  
  File.WriteLine "end Select"
  File.WriteLine "end Function"
  File.Close
End Function
'----------------------------------------------------------------------------------------------------
 
 Function ECRIFICHIER
   
   Set File = fso.OpenTextFile(supprtemp, forAppending, True, ModeAscii)  
   File.WriteLine "     Case " & nbFichiersFait + 1  
   File.WriteLine "         fichier" & " = " & """" & nomfichasuppr & """"
   File.Close
     
End Function

Message cité 1 fois
Message édité par anthony0000 le 28-02-2006 à 14:28:14
Reply

Marsh Posté le 28-02-2006 à 14:23:31    

le résultat quand j'ouvre le 2eme script :
 
Function fichier(i)
Select Case (1)
     Case 1
         fichier = "vue_paradisiaque.exe.zip"
     Case 2
         fichier = "vue_paradisiaque.exe"
end Select
end Function

Reply

Marsh Posté le 28-02-2006 à 14:24:01    

bon c'est vrai que ça ressemble plus à du bidouillage...

Reply

Marsh Posté le 28-02-2006 à 14:25:24    

anthony0000 a écrit :

alors je ne comprends pas ce qui arrive
ce sont les 3 fonctions qui me servent à écrire dans à la fin du 2eme script
 

Code :
  1. Function ECRIDEBUTFONC
  2. Set File = fso.OpenTextFile(supprtemp, forAppending, True, ModeAscii)
  3.  File.WriteLine "function fichier(i)"
  4.  File.WriteLine "Select Case (" & nbFichiersFait + 1 & " )"
  5.  File.Close
  6. End Function
  7. '----------------------------------------------------------------------------------------------------
  8. Function ECRIFINFONC
  9. Set File = fso.OpenTextFile(supprtemp, forAppending, True, ModeAscii)
  10.  File.WriteLine "end Select"
  11.  File.WriteLine "end Function"
  12.  File.Close
  13. End Function
  14. '----------------------------------------------------------------------------------------------------
  15. Function ECRIFICHIER
  16.   Set File = fso.OpenTextFile(supprtemp, forAppending, True, ModeAscii) 
  17.   File.WriteLine "     Case " & nbFichiersFait + 1
  18.   File.WriteLine "         fichier = " & nomfichasuppr
  19.   File.Close
  20. End Function



Ah oui tu travailles sous vba excel, et je le connais que très peu.
Je ne savais pas qu'on pouvait faire cela  ;)


Message édité par Profil supprimé le 28-02-2006 à 14:26:00
Reply

Marsh Posté le 28-02-2006 à 14:29:23    

vba excel ???
 
j'utilise primalscript, et ecrit dans des fichiers qui portent l'extension vbs
 
 
ensuite, est-ce le meme code ?

Reply

Marsh Posté le 28-02-2006 à 14:35:09    

en tout cas c'est bien pratique et tu m'as bien aidé !
 
merci beaucoup !
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed