[déplacé VB6 -> VBS] recherche extension

cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010 - 28 févr. 2010 à 13:59
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010 - 2 mars 2010 à 10:03
Bonjour,
etant debutant j'ai des difficultés à réaliser une tache en VBS pour mon boulot:

J' ai 500 sites physiques qui créent un fichier nommé FP2010.xxx et qui doit être déposé sur un FTP distant sous le même nom avec une extension différente pour chaque site : FP2010.001, 002 ETC....

Pour cela je commence a scanner le ftp distant afin de recuperer les noms des fichiers deja present dans un fichier texte: jusqu'ici tout va bien
Dim objFSO, File

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("scripting.FilesystemObject")
Set File = objFSO.OpenTextFile("c:\temp.txt", 2, True)
Const FOR_APPENDING = 8
Const FOR_READING = 1
Const FOR_WRITING = 2

listFTP
Wscript.Sleep 1000


'********************************************************************************
'Fonction list FTP
Function listFTP()

With File
.WriteLine "open ftp.XXXXXXXXX.com"
.WriteLine "USER xxxxxxxxxx"
.WriteLine "xxxxxxxxxxx"
.WriteLine "ls -s c:\ftplist.txt"
.WriteLine "quit"



End With
WshShell.Run "ftp -n -s:c:\temp.txt", 0


End function


je recupert un fichier avec les lignes suivantes:
FP2010.001
FP2010.002
FP2010.003
FP2010.004
FP2010.005
FP2010.006
FP2010.007
FP2010.008
FP2010.999


Ensuite je dois scanner ce fichier afin de trouver la premiere extension disponible entre 001 et 999 (donc ici 008)
c'est la que je m'y perd je n'arrive pas a faire une boucle cohérente (vraiment debutant)
ce que j 'essaye:
si 001 est trouvé sur ligne 1 je cherche 002 à partir de la ligne 1 sinon je cherche 001 sur la ligne 2 et ainsi de suite ...
Si 001 n'est pas trouvé sur aucune des lignes, je sorts de la boucle et recupert l'extension disponible pour l 'ajouter à mon fichier
j'ai essayé ça mais ca ne marche vraiment pas
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set recupext = objFSO.OpenTextFile("c:\test.txt",1)
Do Until recupext.AtEndOfStream
MyString = recupext.ReadLine
Mysep = "."
MyArray = Split(MyString, Mysep, -1)
n = "001" 

For i = 0 To UBound(Myarray)
next
result = myarray(1)

If n = result Then
MsgBox result & "find"
n = "00" & n+1
MsgBox n
Else MsgBox n & " free"
End If




WScript.Echo result
loop

recupext.Close


Si vous pouvez m'aider à comprendre comment effctuer mes boucles parceque je galère vraiment
merci d'avance

12 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 févr. 2010 à 14:46
Salut
J'apprécie la clarté de tes explications, merci d'avoir pris ce soin.

Une chose manque, ce sont les infos que ton programme donne dans les MsgBox et sur la console.
Je suis curieux de voir ce que donne cette ligne :
    n = "00" & n+1
En effet, mélanger des chaines et des chiffres ne présage rien de bon.
Il faut implicitement préciser la nature des variables au risque de ne pas former la chaine espérée.
Souvent, quand on concatène une chaine et un chiffre, ce dernier place un espace devant lui (pour l'éventuelle négation)
Dans ton cas, il doit, je pense, ajouter la chaine "1" à la précédente chaine et donner un résultat de ce genre : 001, 0012, 00123 ...
Mieux vaudrait transformer 'n' en chiffre pur afin de faire une addition sans risque :
    Dim n As Integer
    n = 1
puis fabriquer une chaine à comparer propre avec ce chiffre. On y reviendra.
Ensuite, il te faut savoir si 001 (et suivants) n'a été trouvé pour dire qu'il est libre.
Or, il faut qu'il lise tout le fichier avant de pouvoir le dire.
Donc, tu ne peux pas afficher de résultat définitif avant la fin. Le Else est à supprimer et simplement, donner l'info en fin de boucle.
De toute façon, si tous les chiffres de 1 à 8 sont 'occupés', il t'afficra le suivant, 9 ou plus.
Attention toutefois : Les chiffres lus dans le fichier doivent obligatoirement être classés dans ordre 0 à X.
La fabrication de chaine telle que décrite ci-dessous est compatible avec tous les chiffres de 0 à 999 :
    Dim sTemp As String    ' à ajouter
    Do Until recupext.AtEndOfStream
        MyString = recupext.ReadLine
        Mysep = "."
        MyArray = Split(MyString, Mysep, -1)
        ' Transforme le chiffre en chaine précéde de zéros (000 à 999)
        sTemp = Right$("000" & CStr(n), 3)
        MsgBox n
        If result = sTemp Then
            MsgBox result & " found"
            n = n + 1
        End If
        WScript.Echo result
    Loop
    MsgBox sTemp & " free"
    MsgBox n & " free"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 févr. 2010 à 14:49
Oup, j'ai oublié ceci juste avant le If result = sTemp :
        result = myarray(1)
0
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010
28 févr. 2010 à 16:21
Bonjour,

merci pour ce premier retour rapide, impressionnant,

pour ta question sur le retour msgbox
n = "00" & n+1

j'obtient -> 002
en effet le n est traduit par 1 , ce qui me donne 00 & 1+1 -> 2 mais c'est une enorme erreur de ma part
car effectivement je risque de recuperer un moment donné quelquechose comme 00123 (00 & n+1) si n arrive a 122)

je vais essayer avec les infos que tu m' a données, pour l 'info : "les noms dans le fichier doivent
obligatoirement être classés dans ordre 0 à X" je vais faire en sorte de lancer un ls avec tri alphabetique.

merci je reviens avec le script operationnel de A à Z pour ceux qui sont intéressés
0
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010
28 févr. 2010 à 17:29
voila ci-joint mon script complet, je le test sur plateforme de test demain et je vous tiens au courant
(encore merci)

Dim objFSO, File, WshShell

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("scripting.FilesystemObject")
Set File = objFSO.OpenTextFile("c:\temp.txt", 2, True)
Const FOR_APPENDING = 8
Const FOR_READING = 1
Const FOR_WRITING = 2

listFTP 'recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000
findext 'recuperation de l'extension libre
Wscript.Sleep 1000
listFTP 'Nouvelle recuperation des fichiers presents sur FTP
Wscript.Sleep 1000
verif 'verification extension toujours dispo
Wscript.Sleep 1000
create 'création du fichier
Wscript.Sleep 1000
sendfile 'envoi du fichier
'********************************************************************************
'Fonction list FTP
Function listFTP()

With File
.WriteLine "open ftp.xxxxxxx.com"
.WriteLine "USER xxxxxxxx"
.WriteLine "xxxx"
.WriteLine "ls -s c:\test.txt"
.WriteLine "quit"



End With
WshShell.Run "ftp -n -s:c:\temp.txt", 0


End function


'********************************************************************************
'Fonction find extension
Function findext()
n = 1
Dim sTemp, recupext, MyString, Mysep, MyArray, extension, verifext
Set recupext = objFSO.OpenTextFile("c:\test.txt",1)
Do Until recupext.AtEndOfStream
MyString = recupext.ReadLine
Mysep = "."
MyArray = Split(MyString, Mysep, -1)
    ' Transforme le chiffre en chaine précéde de zéros (000 à 999)
    sTemp = Right("000" & CStr(n), 3)
'    MsgBox n
    result = myarray(1)
    If result = sTemp Then
'    	 MsgBox result & " found"
         n = n + 1
    End If
     WScript.Echo result
Loop
'MsgBox sTemp & " free"
'MsgBox n & " free"

extension = sTemp 'extension au format 3 chiffres
verifext = n 'extension au format arythmetique

'MsgBox sTemp

recupext.Close
End Function

'********************************************************************************
'Fonction verification extension toujours disponible
Function verif()

n = verifext
Dim sTemp2 
Set recupext = objFSO.OpenTextFile("c:\test.txt",1)
Do Until recupext.AtEndOfStream
MyString = recupext.ReadLine
Mysep = "."
MyArray = Split(MyString, Mysep, -1)
sTemp2 = Right("000" & CStr(n), 3)
    result = myarray(1)
    
    If result = sTemp2 Then
    Twice = "KO"

    End If
     WScript.Echo result
Loop
if Twice = "KO" Then 
'MsgBox "erreur"
findext 'recuperation d'une nouvelle extension
Wscript.Sleep 1000
listFTP 'Nouvelle recuperation des fichiers presents sur FTP
Wscript.Sleep 1000
verif 'verification extension toujours dispo
Wscript.Sleep 1000

End if


recupext.Close
End function

'********************************************************************************
'Fonction création du fichier
Function create()
objFSO.MoveFile "C:\FP2010" , "C:\FP2010." & extension
End Function






'********************************************************************************
'Fonction envoi du fichier
Function sendfile()
With File
.WriteLine "open ftp.xxxxxxx.com"
.WriteLine "USER xxxxxxxx"
.WriteLine "xxxx"
.WriteLine "PUT " & "C:\FP2010." & extension
.WriteLine "quit"

End With

WshShell.run "ftp -n -s:c:\temp.txt", 0
End function
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 févr. 2010 à 20:10
Attention : Les variables dimensionnées à l'intérieur d'une Sub/Function n'ont plus d'existence en dehaors !
Si besoin, passer les variables en paramètre ou bien les délcarer dans la partie "Déclaration" de la page de code.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010
28 févr. 2010 à 20:49
Ok merci pour la remarque
bonne soiree
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
1 mars 2010 à 14:37
 Bonjour,


Il serait peut-être plus judicieux de ne spliter que l'avant-dernière ligne.


Option Explicit

MsgBox findext

Function findext()
   Const ForReading = 1
   Dim objFso, objTextFile, strFile, arrLine, i
   ReDim myArray(0)
   strFile = "C:\Test.txt"

   Set objFso = CreateObject("Scripting.FileSystemObject")
   Set objTextFile = objFso.OpenTextFile(strFile, ForReading)

   Do While Not objTextFile.AtEndOfStream
      ReDim Preserve myArray(UBound(myArray) + 1)
      myArray(UBound(myArray)) = objTextFile.ReadLine
   Loop
   objTextFile.Close
   Set objTextFile = Nothing
   Set objFso  = Nothing

   For i=UBound(myArray)-1 To 1 Step -1
      arrline=Split(myArray(i),".")
      findext = "Line free is " & Right("000" & CStr(arrLine(1)+1), 3)
      Exit For
   Next
End Function



jean-marc
0
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010
1 mars 2010 à 16:27
Bonjour,

pas pour mon cas, car si jamais dans ma liste j'ai par ex:
FP2010.0000
FP2010.0001
FP2010.0003
FP2010.0004

et bien dans ce cas je recuperts la premiere extension disponible soit .0002
donc j ai besoin de spliter l 'ensemble mais merci pour la remarque!

Sinon j ai pu avancer, j'ai augmenter la plage d'extension possible (9999)
et rajouté de la log ainsi qu'enchainement de verification (5 tentatives) avant d'envoyer le fichier afin de verifier qu'un autre site n'a pas depose un fichier avec la même extension entre temps

ci-dessous le code (assez lourd je vous l'accorde mais c'est en forgeant que l'on devient forgeron^^)

Dim objFSO, File, WshShell
Dim strContents, strtime, strdate

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("scripting.FilesystemObject")
Set File = objFSO.OpenTextFile("c:\temp.txt", 2, True)
Const FOR_APPENDING = 8
Const FOR_READING = 1
Const FOR_WRITING = 2

strdate = formatdatetime (date,2)
strtime = formatdatetime (time,3)
SavePathFile = "g:\bal20\log\FP2010.log"

Public extension 
Public verifext 
Public Twice

'"######################################################################################################"
'	Initialisation des logs
If ObjFSO.FileExists (SavePathFile)  Then 
Set objFile = objFSO.GetFile(SavePathFile)	
If objFile.Size > 2097152 Then
If ObjFSO.FileExists ("g:\bal20\log\FP2010.old") Then
ObjFSO.DeleteFile "g:\bal20\log\FP2010.old"
End if
ObjFSO.MoveFile "g:\bal20\log\FP2010.log" , "g:\bal20\log\FP2010.old"
End If
End If

'"######################################################################################################"
'Recuperation date et heure execution du script jj/mm/AAAA
If ObjFso.FileExists (SavePathFile)  Then 
Set OutPutFileTxt = objFSO.OpenTextFile(SavePathFile,FOR_READING,True)
strContents = OutPutFileTxt.ReadAll
OutPutFileTxt.Close
End If

Set OutPutFileTxt = objFSO.OpenTextFile(SavePathFile,FOR_WRITING,True)
OutPutFileTxt.WriteLine "######################################################################################################"
OutPutFileTxt.WriteLine "************************ FP2010 *************************************"
OutPutFileTxt.WriteLine strdate & "  " & strtime 
OutPutFileTxt.WriteLine strdate & "  " & strtime & " :start up : " & now





'"######################################################################################################"
'	Traitement


OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP"
listFTP 'recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000

OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de l'extension disponible"
findext 'recuperation de l'extension libre
Wscript.Sleep 1000

OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP pour vérification"
listFTP 'Nouvelle recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000

OutPutFileTxt.WriteLine strdate & "  " & strtime & "Vérification si extension : " & extension & " toujours disponible"
verif 'verification extension toujours dispo
Wscript.Sleep 1000


If twice <> "KO" Then
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Extension : " & extension & " toujours disponible"
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Renommage du fichier FP2010 en FP2010." & extension
create 'création du fichier
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Envoi du fichier FP2010." & extension
sendfile 'envoi du fichier

Else  'Recherche d'une nouvelle extension disponible 2eme tentative
OutPutFileTxt.WriteLine strdate & "  " & strtime & "....................2ème tentative..........................."
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP"
listFTP 'recuperation liste des fichiers presents sur FTP
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération d'une nouvelle extension disponible"
findext
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP pour vérification"
listFTP 'Nouvelle recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Vérification si extension : " & extension & " toujours disponible"
verif
Wscript.Sleep 1000
If twice <> "KO" Then
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Extension : " & extension & " toujours disponible"
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Renommage du fichier FP2010 en FP2010." & extension
create 'création du fichier
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Envoi du fichier FP2010." & extension
sendfile 'envoi du fichier

Else  'Recherche d'une nouvelle extension disponible 3eme tentative
OutPutFileTxt.WriteLine strdate & "  " & strtime & "....................3ème tentative..........................."
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP"
listFTP 'recuperation liste des fichiers presents sur FTP
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération d'une nouvelle extension disponible"
findext
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP pour vérification"
listFTP 'Nouvelle recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Vérification si extension : " & extension & " toujours disponible"
verif
Wscript.Sleep 1000
If twice <> "KO" Then
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Extension : " & extension & " toujours disponible"
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Renommage du fichier FP2010 en FP2010." & extension
create 'création du fichier
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Envoi du fichier FP2010." & extension
sendfile 'envoi du fichier

Else  'Recherche d'une nouvelle extension disponible 4eme tentative
OutPutFileTxt.WriteLine strdate & "  " & strtime & "....................4ème tentative..........................."
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP"
listFTP 'recuperation liste des fichiers presents sur FTP
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération d'une nouvelle extension disponible"
findext
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP pour vérification"
listFTP 'Nouvelle recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Vérification si extension : " & extension & " toujours disponible"
verif
Wscript.Sleep 1000
If twice <> "KO" Then
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Extension : " & extension & " toujours disponible"
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Renommage du fichier FP2010 en FP2010." & extension
create 'création du fichier
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Envoi du fichier FP2010." & extension
sendfile 'envoi du fichier

Else  'Recherche d'une nouvelle extension disponible 5eme tentative
OutPutFileTxt.WriteLine strdate & "  " & strtime & "....................5ème tentative..........................."
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP"
listFTP 'recuperation liste des fichiers presents sur FTP
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération d'une nouvelle extension disponible"
findext
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP pour vérification"
listFTP 'Nouvelle recuperation liste des fichiers presents sur FTP
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Vérification si extension : " & extension & " toujours disponible"
verif
Wscript.Sleep 1000
If twice <> "KO" Then
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Extension : " & extension & " toujours disponible"
           			OutPutFileTxt.WriteLine strdate & "  " & strtime & "Renommage du fichier FP2010 en FP2010." & extension
           			create 'création du fichier
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Envoi du fichier FP2010." & extension
sendfile 'envoi du fichier										            
Else
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Echec apres 5 tentative"
End if
End If	


End if


End if

End If
OutPutFileTxt.WriteLine strdate & "  " & strtime & "FIN de procédure"
OutPutFileTxt.Write strContents   'Recuperation du fichier log anterieur


'"######################################################################################################"
'Fonction list FTP
Function listFTP()

With File
.WriteLine "open ftp.XXXXXXX.com"
.WriteLine "USER XXXXXX"
.WriteLine "XXXXXX"
.WriteLine "ls -s c:\ftplist.txt"
.WriteLine "quit"



End With
WshShell.Run "ftp -n -s:c:\temp.txt", 0

OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération des données dans c:\temp.txt"
End Function




'"######################################################################################################"
'Fonction find extension
Function findext()
n = 0
Dim MyString, Mysep, MyArray, recupext, sTemp, rtemp
Set recupext = objFSO.OpenTextFile("c:\test.txt",1)
Do Until recupext.AtEndOfStream
MyString = recupext.ReadLine
Mysep = "."
MyArray = Split(MyString, Mysep, -1)
    ' Transforme le chiffre en chaine précéde de zéros (0000 à 9999)
    sTemp = Right("0000" & CStr(n), 4)
'    MsgBox n
    result = myarray(1)
    If result = sTemp Then
'    	 MsgBox result & " found"
         n = n + 1
    End If
'     WScript.Echo result
Loop

'MsgBox n & " free"
rTemp = Right("0000" & CStr(n), 4)
extension = rTemp 'extension au format 4 chiffres
verifext = n 'extension au format arythmetique

'MsgBox rTemp
OutPutFileTxt.WriteLine strdate & "  " & strtime & "L extension : " & extension & " est disponible"
recupext.Close
End Function



'"######################################################################################################"
'Fonction verification extension toujours disponible
Function verif()

n = verifext
Dim sTemp2 
Set recupext = objFSO.OpenTextFile("c:\test.txt",1)
Do Until recupext.AtEndOfStream
MyString = recupext.ReadLine
Mysep = "."
MyArray = Split(MyString, Mysep, -1)
sTemp2 = Right("0000" & CStr(n), 4)
    result = myarray(1)
    
    If result = sTemp2 Then
    Twice = "KO"

    End If
'     WScript.Echo result
Loop
if Twice = "KO" Then 
'MsgBox "erreur"


End if


recupext.Close
End Function




'"######################################################################################################"
'Fonction création du fichier
Function create()
objFSO.MoveFile "C:\FP2010" , "C:\FP2010." & extension
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Fichier : FP2010." & extension & " Prêt à l'envoi"
End Function


'"######################################################################################################"
'Fonction envoi du fichier
Function sendfile()
With File
.WriteLine "open ftp.XXXXXXX.com"
.WriteLine "USER XXXXXX"
.WriteLine "XXXXXX"
.WriteLine "PUT " & "C:\FP2010." & extension
.WriteLine "quit"

End With

WshShell.run "ftp -n -s:c:\temp.txt", 0
OutPutFileTxt.WriteLine strdate & "  " & strtime & "fichier FP2010." & extension & " envoyé à " & now
End Function

'"######################################################################################################"
'Function Convert WMI Date-Time Values JJ/MM/AAAA
Function WMIDateStringToDate(dtmStartDate)
    WMIDateStringToDate = CDate(Mid(dtmStartDate, 7, 2) & "/" & _
        Mid(dtmStartDate, 5, 2) & "/" & Left(dtmStartDate, 4) _
            & " " & Mid (dtmStartDate, 9, 2) & ":" & _
                Mid(dtmStartDate, 11, 2) & ":" & Mid(dtmStartDate, _
                    13, 2))
End Function


J' ai testé etape par etape cela fonctionne il me reste à pouvoir tester dans son ensemble
je rencontre par contre un petit soucis de finition
j'essaye de recuperer dans le fichier log le resultat du FTP afin de loguer si la connection et le transfert sont OK

sous dos j'utilise la commande :
ftp -n -s:c:\temp.txt >> c:\log.log

cela me renvoit correctement les infos de transfert FTP (idem si je l'execute par l executer de W2000
par contre quand je lance sous VB il me fait une copie du contenu du fichier c:\temp.txt

j'ai essayé:
Set WshExec = WshShell.Exec("ftp -n -s:c:\temp.txt")
strFTPResult = LCase(WshExec.StdOut.ReadAll)
OutPutFileTxt.WriteLine strFTPResult


et
WshShell.Run "ftp -n -s:c:\temp.txt >> c:\log.log", 0


et
WshShell.Run "command ftp -n -s:c:\temp.txt >> c:\log.log", 0


et dans les 3 cas cela ne m'ecrit par le resultat de la commande mais le contenu de c:\temp.txt, une idée car je ne trouve rien de plus sur le net?
0
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010
1 mars 2010 à 16:52
en me relisant je viens de constater une action inutile dans :

If twice <> "KO" Then
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Extension : " & extension & " toujours disponible"
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Renommage du fichier FP2010 en FP2010." & extension
create 'création du fichier
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Envoi du fichier FP2010." & extension
sendfile 'envoi du fichier

Else  'Recherche d'une nouvelle extension disponible 2eme tentative
OutPutFileTxt.WriteLine strdate & "  " & strtime & "....................2ème tentative..........................."
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP"
listFTP 'recuperation liste des fichiers presents sur FTP
WScript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération d'une nouvelle extension disponible"
findext
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP pour vérification"
listFTP 'Nouvelle recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Vérification si extension : " & extension & " toujours disponible"
verif
Wscript.Sleep 1000


en effet je n'ai pas besoin de recuperer une fois de plus le list FTP si l extension existe sur le FTP puisque je viens de recuperer la list juste avant, je remplace donc par:

Else  'Recherche d'une nouvelle extension disponible 2eme tentative
OutPutFileTxt.WriteLine strdate & "  " & strtime & "....................2ème tentative..........................."
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération d'une nouvelle extension disponible"
findext
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Récupération de la liste des fichiers présents sur le FTP pour vérification"
listFTP 'Nouvelle recuperation liste des fichiers presents sur FTP
Wscript.Sleep 1000
OutPutFileTxt.WriteLine strdate & "  " & strtime & "Vérification si extension : " & extension & " toujours disponible"
verif
Wscript.Sleep 1000
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 mars 2010 à 19:46
Puisqu'on n'a pas la structure ni les fichiers que traitent ton programme, il est inutile de copier/coller toutes ces lignes : personne ne les lira.
Si tu as encore des soucis, ne colle QUE le code à problème.

PS : Pour le Split, si tu n'as besoin que de tester que le 2ème élément (d'index 1) par rapport à sTemp, tu peux aussi utiliser cette syntaxe moins jolie mais plus économe, sans passer par une variable tableau intermédiaire :
If Split(MyString, Mysep, -1)(1) = sTemp Then
(Pas sûr que VBS l'accepte)
0
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010
1 mars 2010 à 20:21
Ok desole pour le spam de code ^^
j' essayerai demain ta commande pour le split

Derniere question:
je rencontre par contre un petit soucis de finition
j'essaye de recuperer dans le fichier log le resultat du FTP afin de loguer si la connection et le transfert sont OK

sous dos j'utilise la commande :
Code :
ftp -n -s:c:\temp.txt >> c:\log.log




cela me renvoit correctement les infos de transfert FTP (idem si je l'execute par l executer de W2000
par contre quand je lance sous VB il me fait une copie du contenu du fichier c:\temp.txt

j'ai essayé:
Code VBScript :
Set WshExec = WshShell.Exec("ftp -n -s:c:\temp.txt")
strFTPResult = LCase(WshExec.StdOut.ReadAll)
OutPutFileTxt.WriteLine strFTPResult



et
Code VBScript :
WshShell.Run "ftp -n -s:c:\temp.txt >> c:\log.log", 0


et
Code VBScript :
WshShell.Run "command ftp -n -s:c:\temp.txt >> c:\log.log", 0


et dans les 3 cas cela ne m'ecrit par le resultat de la commande mais le contenu de c:\temp.txt, une idée car je ne trouve rien de plus sur le net?

Bonne soiree ou bonne journée
0
cs_ckimoi Messages postés 15 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 mars 2010
2 mars 2010 à 10:03
Bonjour Jack,

Ta commande de split fonctionne en VBS (merci)
Do Until recupext.AtEndOfStream
MyString = recupext.ReadLine
Mysep = "."
    ' Transforme le chiffre en chaine précéde de zéros (0000 à 9999)
    sTemp = Right("0000" & CStr(n), 4)
    MsgBox n

    If Split(MyString, Mysep, -1)(1) = sTemp Then 
         n = n + 1
    End If
     WScript.Echo result
Loop


Une idée pour mon post precedent avec mon soucis de recuperation de log FTP?
0
Rejoignez-nous