papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Des SUBs en VBS Dim 19 Jan 2014 - 0:59 | |
| Panoramiciens de tout pays je vous salue. Pour le besoin de mon programme qui ne verra jamais le jour puisqu’il n’existe que dans le monde virtuel de mon imagination, j’ai deux petits problèmes à régler. 1) Je dispose d’une chaîne de caractères qui répond au doux nom de d$ (elle contient évidemment des caractères : c’est une chaîne vous dis-je !) Je veux savoir si son contenu représente une date valide ? 2) Je dispose maintenant de deux chaînes de caractères s1$ et s2$ et je veux les comparer ente elles. Pour le 1er problème, Panoramic ne dispose pas d’une fonction du genre IsDate(d$) qui répond à ma demande. On doit bricoler un sous-programme qui réalise cette tâche. Pour le second problème, Panoramic ne permet que la comparaison de l’égalité (ou la différence) de 2 chaînes : - Code:
-
IF s1$ = s2$ then …. ou - Code:
-
IF s1$ <> s2$ then … . On ne peut pas faire - Code:
-
IF s1$ > s2$ then … ou - Code:
-
IF s1$ < s2$ then … Après avoir exposé le genre de problème qu’un panoramicien puisse rencontrer, je vous propose le code suivant qui comprend deux SUBs : SUB IsDate(d$) qui retourne dans la variable IsDate$ la valeur ‘True’ ou ‘False’ selon que d$ représente une date valide ou non. SUB CompareStr(s1$,s2$) qui retourne dans la variable CompareStr$ l’une des trois valeurs ‘=’, ‘<’ ou ‘>’ selon que les deux chaînes sont identiques, ou que la 1ère est inférieure à la seconde, ou que la 1ère est supérieure à la seconde. La comparaison se fait selon le code ASCII. Pour utiliser ces SUBs dans un programme, on fait par exemple : - Code:
-
IsDate(d$) IF IsDate$ = "True" then la chaine d$ représente bien une date valide
- Code:
-
CompareStr(s1$,s2$) IF CompareStr$ = "=" les 2 chaines sont identiques ELSE IF CompareStr$ = ">" s1$ est supérieure à s2$ ELSE s1$ est inférieure à s2$ END_IF END_If
REMARQUE :Les deux SUBs sont deux scripts en VBScript qui contiennent une astuce pour récupérer la valeur de retour. - Spoiler:
- Code:
-
rem ============================================================================ ' Deux SUBs en VBScript ' * IsDate(d$) pour vérifier la validité d'une date ' * CompareStr(s1$,s2$) pour comparer deux chaînes de caractères rem ============================================================================ rem SUB_VBS.BAS Par Papydall rem ============================================================================ IsDate("32/02/2014") : if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" ' IsDate("29/02/2016") : if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" ' IsDate("29/02/2014") : if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" ' IsDate("janvier 18,2014"): if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" ' IsDate("18 janvier 2014"): if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" ' IsDate("01-01-01") : if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" ' IsDate("2014, Février, 10"): if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" ' IsDate("18,01,2014") : if IsDate$ = "True" then message "Date valide" : else : message "Date invalide" rem ============================================================================ dim s1$,s2$ s1$ = "PAPYDALL" : s2$ = "PANORAMICIEN" : ' s1$ > s2$ ' s1$ = "Papydall" : s2$ = "panoramicien" : ' s1$ < s2$ ' s1$ = "Papydall" : s2$ = "Papydall" : ' s1$ = s2$ ' s1$ = "123" : s2$ = "2" : ' s1$ < s2$ CompareStr(s1$,s2$) : message s1$ + " " + CompareStr$ + " " + s2$
end rem ============================================================================ ' Script VBS vérifiant la validité d'une date ' La fonction IsDate(d$) retourne dans la variable chaîne IsDate$ la valeur ' booléenne "True" si le paramètre transmis d$ représente une date valide, ' sinon elle retourne "False" ' Différentes formes de dates sont acceptées ' Exemples d'appel : ' IsDate("32/02/2014") : ' ---> False ' IsDate("29/02/2016") : ' ---> True ' IsDate("29/02/2014") : ' ---> False ' IsDate("janvier 18,2014") : ' ---> True ' IsDate("18 janvier 2014") : ' ---> True ' IsDate("01-01-01") : ' ---> True ' IsDate("2014, Février, 10"):' ---> True ' IsDate("18,01,2014") : ' ---> True rem ============================================================================ SUB IsDate(d$) dim_local f$,retour$,g$ if variable("IsDate$") = 0 then DIM IsDate$ f$ = "c:\temp\IsDate.vbs" : ' Fichier temporaire contenant le script retour$ = "c:\temp\retour.txt" : ' Fichier temporaire contenant le résultat de la fonction g$ = chr$(34) : ' caractère guillemet ' Enregistrer le script dans le fichier temporaire f$ FILE_OPEN_WRITE 9999, f$ file_writeln 9999, "DIM bValeur,fso,MyFile" : ' debut du script file_writeln 9999, "Set fso = CreateObject("+g$+"Scripting.FileSystemObject"+g$+")" file_writeln 9999, "Set MyFile = fso.CreateTextFile("+g$+retour$+g$+", True)" file_writeln 9999, "bValeur = IsDate("+g$+d$+g$+")" file_writeln 9999, "MyFile.WriteLine(bValeur)" file_writeln 9999, "MyFile.Close" : ' Fin du script FILE_CLOSE 9999 : ' Fin de l'enregistrement
EXECUTE_WAIT f$ : ' Exécution du script FILE_DELETE f$ : ' supprimer le fichier du script file_open_read 9999,retour$ : ' ouvrir le fichier contenant la sortie du script file_readln 9999,IsDate$ : ' Recuperer la valeur de la fonction file_close 9999 : file_delete retour$ : ' Supprimer le fichier temporaire END_SUB rem ============================================================================ ' Script VBS comparant deux chaînes de caractères selon l'ordre ASCII ' Cette fonction retourne dans la variable "CompareStr$" un unique caractère : ' ">" si s1$ est supérieure à s2$ ' "<" si s1$ est inférieure à s2$ ' "=" si les deux chaînes sont identiques. ' Exemples d'appel : ' CompareStr("Papydall","Panoramicien") ' CompareStr("1234","2") rem ============================================================================ SUB CompareStr(s1$,s2$) dim_local f$,retour$,g$ if variable("CompareStr$") = 0 then DIM CompareStr$ f$ = "c:\temp\CompareStr.vbs" : ' Fichier temporaire contenant le script retour$ = "c:\temp\retour.txt" : ' Fichier temporaire contenant le résultat de la fonction g$ = chr$(34) : ' caractère guillemet ' Enregistrer le script dans le fichier temporaire f$ FILE_OPEN_WRITE 9999, f$ file_writeln 9999, "DIM c1,c2,result,fso,MyFile" file_writeln 9999, "c1 = " + g$ + s1$ + g$ file_writeln 9999, "c2 = " + g$ + s2$ + g$ file_writeln 9999, "if c1 > c2 then" file_writeln 9999, "result = " + g$ + ">" + g$ file_writeln 9999, "elseif c1 < c2 then" file_writeln 9999, "result = " + g$ + "<" + g$ file_writeln 9999, "else" file_writeln 9999, "result = " + g$ + "=" + g$ file_writeln 9999, "end if" file_writeln 9999, "Set fso = CreateObject("+g$+"Scripting.FileSystemObject"+g$+")" file_writeln 9999, "Set MyFile = fso.CreateTextFile("+g$+retour$+g$+", True)" file_writeln 9999, "MyFile.WriteLine(result)" file_writeln 9999, "MyFile.Close" : ' Fin du script
FILE_CLOSE 9999 : ' Fin de l'enregistrement
EXECUTE_WAIT f$ : ' Exécution du script FILE_DELETE f$ : ' suppression du fichier du script file_open_read 9999,retour$ : ' ouvrir le fichier contenant la sortie du script file_readln 9999,compareStr$ : ' Recuperer la valeur de la fonction file_close 9999 : file_delete retour$ : ' Supprimer le fichier temporaire END_SUB rem ============================================================================
| |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Des SUBs en VBS Dim 19 Jan 2014 - 12:31 | |
| Hmmm Il parait que ça n’intéresse personne! | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 19 Jan 2014 - 14:54 | |
| @ Papydall,
Si, si mais mon cerveau étant primaire, je ne me penche que sur un sujet à la fois et là j' étais un peu pris. | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 19 Jan 2014 - 15:14 | |
| Les deux sub peuvent être faite en panoramic non ?...
la deuxième utilise les codes ascii et c'est un peu confus
PANORAMIC n' est pas différent de panoramic c' est le même mot la différence est entre majuscule et minuscule mais le sens du mot est le même.... | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Des SUBs en VBS Dim 19 Jan 2014 - 17:59 | |
| La comparaison se fait comme ceci : Si les 2 chaînes sont de longueurs différentes, on ajoute des espaces à la plus courte pour obtenir 2 chaînes de même longueur. Ensuite la comparaison se fait caractère par caractère selon le code ASCII de chaque caractère : les lettres en majuscule commencent par A = 65, B = 66 etc. tandis que celles en minuscules commencent en a = 93, b = 94, etc. Donc les majuscules sont inférieures aux minuscules ! "PANORAMIC" < "panoramic". "123" < "2" "azerty’ > "Cette phrase qui est assez longue" | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Des SUBs en VBS Dim 19 Jan 2014 - 18:12 | |
| Si on veut que "PANORAMIC" et "panoramic" soient considérées comme identiques, il suffit d’ajouter dans la SUB Comparestr(s1$,s2$) , en dessous de la ligne DIM_LOCAL la ligne suivante - Code:
-
s1$ = upper$(s1$) : s2$ = upper$(s2$) Mais ce n’est plus l’ordre ASCII. | |
|
mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Des SUBs en VBS Lun 20 Jan 2014 - 12:38 | |
| Bonjour a tous Papydall pour la Tunisi je ne sais pas mais en france le dimanche est ferie Je travail deja lentement le reste de la semaine alors la!!! | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Des SUBs en VBS Lun 20 Jan 2014 - 16:35 | |
| @mindstorm En Tunisie également, le dimanche est jour férié. Mais moi, je ne travaille plus, je suis simplement un programmeur du dimanche alors là !!! | |
|
mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Des SUBs en VBS Lun 20 Jan 2014 - 20:21 | |
| Papydall pour un dimanche c'est un gros dimanche de minuit a 19 heure | |
|
Contenu sponsorisé
| Sujet: Re: Des SUBs en VBS | |
| |
|