bonjour, j'ai un truc très précis, à faire en ASP:
j'ai un système de fichier, dont les noms sont stockés dans une base de données, et comme je veux un historique, je ne change pas le nom d'un fichier, je le stocke avec un numéro de version qui est censé évoluer selon le temps:
le nom relatif du fichier sera de cette forme:
filename_vX.Y.extension
pour changer ce nom dans le fichier, je procède de la manière suivante:
-j'extrais l'extension puis la version, puis je récupère le nom
-j'ai une chaine _vX.Y qui représente la version.
X représente un numéro de version majeure, et Y un numéro de version mineure.
au départ la version était représentée en réels dans ma base, mais quand je changeais le numéro en ajoutant +0,1 par exemple, cela engendrait à long terme des erreurs, et je me suis retrouvé avec une version 2,599999 après une version 2.5, et en plus, si je décide d'avoir 11 versions mineures avant de passer à la version majeure (ici avec 2 versions majeures déjà), je peux vouloir passer de la version 2.9 à la version 2.10, donc je ne peux pas gérer ça facilement avec les décimaux (parce que je ne sais pas combien de décimales j'aurais, et il faut gérer l'incrément)
pour ne pas trop massacrer la base qui était déjà très lourde au moment où je suis arrivé à mon stage, j'ai juste fais passer la colonne de réel flottant à varchar.
mais mon problème, c'est que les fonctions que j'ai faites pour remplacer l'incrément ne fonctionnent pas, et je n'ai aucun moyen d'avoir les résultats intermédiaires, car je fais des tests sur un serveur distant, et les tests ne peuvent que se limiter à un test d'intégration...
je vous donne les fonctions dont je me sers
et l'appel est ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Function Extension(NomFichier) Dim n, varTemp varTemp=CStr(NomFichier) n=inStr(varTemp,".") Do If n=0 Then Exit Do varTemp=Right(varTemp, Len(varTemp)-n) n=inStr(varTemp,".") Loop Extension=CStr(Right(nomFichier,Len(varTemp)+1)) End Function Function Version(NomFichierSE) ' On utilise le nom du fichier sans l'extension qui est déjà extraite Dim n, varTemp varTemp=CStr(NomFichierSE) n=inStr(varTemp,"v") Do If n=0 Then Exit Do varTemp=Right(varTemp,Len(varTemp)-n) n=inStr(varTemp,"v") Loop Version=CStr(Right(NomFichierSE,Len(VarTemp)+2)) End Function ' Pour vmin et vmax, on aura StrVersion de la forme _vX.Y ' vmin renverra Y et vmax renverra X Function vmin(StrVersion) Dim n Dim temp temp=CStr(StrVersion) n=inStr(temp,".") Do If n=0 Then Exit Do temp= Right(temp,Len(temp)-n) n=inStr(temp,".") Loop vmin=Cint(temp) End Function Function vmax(StrVersion) Dim temp Dim vmin vmin=vmin(StrVersion) temp=Left(StrVersion,Len(StrVersion)-Len(vmin)-1) vmax=Cint(Right(temp,Len(temp)-2)) End Function Function UpGrade(strVersion, Importance) 'On aura une chaine de type: _vXX.YY Dim vmin Dim vmax vmin=vmin(strVersion) vmax=vmax(strVersion) If Importance like "majeure" Then vmax=CStr(vmax+1) vmin=CStr("0") Else vmin=CStr(vmin+1) End if UpGrade="_v"& vmax &"."& vmin End Function
je sais que mes fonctions Extension et Version sont bonnes, car je les utilise dans une autre page (celle qui crée le fichier au départ, à la version 0.1), et les résultats sont bons
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 vFichier_Ext = Extension(vFichier) 'On extrait l'extension, en comprenant le point vFichier_Name = Left(vFichier, Len(vFichier)-Len(vFichier_Ext)) vFichier_Vers= Version(vFichier_Name) 'On extrait du reste la version du fichier, s'il y en a une, afin de pouvoir la changer vFichier_Name= Left(vFichier, Len(vFichier)-Len(vFichier_Vers)-Len(vFichier_Ext)) 'On extrait le reste: le nom du fichier vNewVersionFichier=Upgrade(vFichier_Vers,"mineure")
l'erreur réside donc dans les fonctions vmin, vmax et upgrade, le problème est que j'ai appris l'ASP sur le tas en commençant mon stage, et que je me suis inspiré des codes sources de mon prédécesseur, donc il est probable que j'aurais pu faire mieux, mais je savais pas comment...
maintenant que j'ai expliqué le contexte, voici ma question:
quelqu'un pourrait-il me donner un moyen d'extraire d'une chaine du type "_vX.Y" X et Y étant des nombres inconnus bien sur, et de passer cette chaine à "_vX.(Y+1)" ou "_v(X+1).0"? ceci en ASP coté serveur svp![]()
merci d'avance pour vos réponses
Partager