Soyez le premier à donner votre avis sur cette source.
Vue 24 221 fois - Téléchargée 304 fois
' module de base. Utiliser le démo pour l'utiliser. Option Explicit ' Module de conversion et calcul d'espace ' vbfrance, dpouliot ' inspiré d'un code de < vbfrance, vbtom > merci Public Type t_OKMG ' structure des valeurs par catégorie val(8) As Double ' nombre octet, kilo, etc... nom(8) As String ' nom de la valeur top_ref As Integer ' si 3 = nombre en Giga illimité ' si 4 = nombre en tera illmité, etc... End Type ' ********************************************************** ' initialisation et mise à zéro d'une structure Sub fnc_init_OKMG(okmg As t_OKMG) Dim cc As Integer While cc < 8 okmg.val(cc) = 0 cc = cc + 1 Wend okmg.top_ref = 4 ' 4 = le plus haut résultat en Tera ' cette valeur pourra être plus grande que 1024 ' nom des carégories okmg.nom(0) = "octet(s)" ' Octet okmg.nom(1) = "Ko" ' Kilo Octets okmg.nom(2) = "Mo" ' méga Octets okmg.nom(3) = "Go" ' Giga Octets okmg.nom(4) = "To" ' tera Octets okmg.nom(5) = "Po" ' penta Octets okmg.nom(6) = "Eo" ' exa Octets okmg.nom(7) = "Zo" ' zetta Octets okmg.nom(8) = "Yo" ' yotta Octets End Sub ' ********************************************************** ' cette fonction prend toute les valeurs de ces catégories ' et les ramenent en multiple de 1024 par catégorie Function fnc_okmg_cnv(okmg As t_OKMG) As t_OKMG Dim p_grand As Double Dim cc As Integer Screen.MousePointer = 11 p_grand = 1073741824 ' 1Go, valeur max utiliser pour éviter dépassement de capacité mémoire While cc < okmg.top_ref While okmg.val(cc) >= p_grand okmg.val(cc) = okmg.val(cc) - p_grand okmg.val(cc + 1) = okmg.val(cc + 1) + (p_grand / 1024) Wend okmg.val(cc + 1) = okmg.val(cc + 1) + (okmg.val(cc) \ 1024) ' entier de la division okmg.val(cc) = okmg.val(cc) Mod 1024 ' le mod donne erreur cc = cc + 1 Wend fnc_okmg_cnv = okmg Screen.MousePointer = 0 End Function ' ********************************************************** Function fnc_okmg_add(okmg_1 As t_OKMG, okmg_2 As t_OKMG) As t_OKMG Dim cc As Integer Dim okmg_3 As t_OKMG fnc_init_OKMG okmg_3 While cc <= okmg_3.top_ref okmg_3.val(cc) = okmg_1.val(cc) + okmg_2.val(cc) cc = cc + 1 Wend okmg_3 = fnc_okmg_cnv(okmg_3) fnc_okmg_add = okmg_3 End Function ' ********************************************************** ' ATT. : ne pas faire de soustraction négative, pas traité Function fnc_okmg_sous(okmg_1 As t_OKMG, okmg_2 As t_OKMG) As t_OKMG Dim cc As Integer Dim okmg_3 As t_OKMG fnc_init_OKMG okmg_3 cc = 0 While cc < okmg_3.top_ref If okmg_1.val(cc) < okmg_2.val(cc) Then okmg_1.val(cc) = okmg_1.val(cc) + 1024 okmg_1.val(cc + 1) = okmg_1.val(cc + 1) - 1 End If cc = cc + 1 Wend cc = 0 While cc < okmg_3.top_ref okmg_3.val(cc) = okmg_1.val(cc) - okmg_2.val(cc) cc = cc + 1 Wend okmg_3 = fnc_okmg_cnv(okmg_3) fnc_okmg_sous = okmg_3 End Function ' **********************************************************
La valeur peut aller à 6 "exa", etc... Ça commence à être du volume...
Si c'est un autre "P", dans le TYPE augmenter l'indice à 9 et dans la routine d'initialisation faire "while cc < 9". Ajouter le nom de la catégorie dans "fnc_init_OKMG", "okmg.nom(9) = "LeNom" et voilà une catégorie de plus, un autre multiple de 1024. Les traitements s'y adapterons, souf pour l'affichage dans le démo.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.