Convertion octets en Mo

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Convertion octets en Mo

Message par Programmes »

Bonjour à tous,

Je suis en train de faire un programme avec la version 5.22 pour calculer la taille d'un répertoire.
Voici ma fonction qui traduit la taille en texte:

Code : Tout sélectionner

Procedure.s Convertion(Item)
    Protected Txt.s
    Select Item
        Case 1:Taille=TailleRepertoire
        Case 2:Taille=TailleFichiers
    EndSelect
    ;unité sert à savoir dans qu'elle unité on veut convertir
    Select Unite
        Case 1;Go
            reste=Taille%1073741824
            If reste>0:Txt.s=StrF(Taille/(1073741824),2) :Else:TexteGo.s=StrF(Taille/(1073741824),0):EndIf:Txt=Txt+" Go"
        Case 2;Mo
            reste=Taille%1048576
            If reste>0:Txt=StrF(Taille/1048576 ,2) :Else:Txt=StrF(Taille/1048576 ,0):EndIf:Txt=Txt+" Mo"
        Case 3;Ko
            reste=Taille%1024
            If reste>0:TexteKo.s=StrF(Taille/1024 ,2) :Else:TexteKo.s=StrF(Taille/1024 ,0):EndIf:TexteKo=TexteKo+" Ko"
        Case 4:Txt=StrF(Taille)+" octets"
    EndSelect
   ProcedureReturn Txt
EndProcedure
Au lieu d'utiliser StrF(Taille/1048576 ,2) je voudrais remplacer le nombre de chiffre après la virgule en fonction du résultat...J'ai trouvé ceci sur internet:

Code : Tout sélectionner

If Taille >= 1000 : Unite = 1 : NbDecimals = 2 : EndIf
If Taille >= 10000 : Unite = 1 : NbDecimals = 1 : EndIf
If Taille >= 1000000 : Unite = 2 : NbDecimals = 2 : EndIf
If Taille >= 10000000 : Unite = 2 : NbDecimals = 1 : EndIf
If Taille >= 1000000000 : Unite = 3 : NbDecimals = 2 : EndIf
If Taille >= 10000000000 : Unite = 3 : NbDecimals = 1 : EndIf
Txt=StrF(Taille/1048576 ,NbDecimals)
Pour exemple, la taille de mon dossier fait 53.869.272 octets soit 51.37 Mo. Si je prends l'exemple trouvé sur internet, la fonction me retourne 51.4 ce qui veut dire que le résultat est arrondi.
Il n'y a pas un moyen d'éviter d'arrondir afin d'avoir le résultat escompté soit 51.37?
Je ne sais pas si je me fais bien comprendre...
Merci à tous pour vos réponse(s) et bonne journée!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertion octets en Mo

Message par Backup »

regarde la doc a Strf()
la taille de mon dossier fait 53.869.272 octets soit 51.37 Mo.
heu t'as bu quoi au ptit dej ??

53.869 ça devrai faire 53.87 au mieux ..... surement pas 51.37 8O


ps: si tu ne veux pas arrondir, utilise Left() ou Mid()

voir meme StringField()
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Convertion octets en Mo

Message par GallyHC »

Bonjour,

J'avais fait une version sans trop de test inutile cela donne :

Page du source :
http://www.pbfrance.com/?url=source&cmd=viewer&val=1

Code direct :
http://www.pbfrance.com/php/form_source ... .php?num=1

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Re: Convertion octets en Mo

Message par Programmes »

Merci à tous pour vos réponses...
Pour la conversion, j'ai utilisé un convertisseur sur internet. Je m'empresse d'utiliser les infos...
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Convertion octets en Mo

Message par GallyHC »

Bonjour,

Dobro > en divisant par 1024 et en arrondissant avec ma routine j'ai bien "51.4 Mo".

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertion octets en Mo

Message par Backup »

je parlais de l'arrondis de ce nombre :53.869 ..........ça devrai faire 53.87
mais effectivement, j'ai omis qu'il s'agissait d'octets ... :mrgreen:
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Convertion octets en Mo

Message par GallyHC »

:mrgreen: allez tu es pardonné ;)
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Convertion octets en Mo

Message par MLD »

Salut a tous

Une autre façon de faire

Code : Tout sélectionner

Procedure.s EXPLORER_ConvertSize2(chiffre.d)
 ch2.d = chiffre.d/1024 
 a$ = StrD(ch2.d,3) 
 I = 0    
 For X = 1 To Len(a$)
   If Mid(a$,X,1) ="."
     Break
   EndIf
   I = I + 1
 Next
 j$ = ""
 Select I
  Case 1   
     If ch2.d < 1
      J$ = "O"
     Else
      J$ = "Ko"
    EndIf 
  Case 2 To 3
      J$ = "Ko" 
  EndSelect  
  ProcedureReturn a$ + " " + j$
EndProcedure
Debug EXPLORER_ConvertSize2(1020000)		

Je te laisse terminé a +
Programmes
Messages : 80
Inscription : mer. 24/mai/2006 12:12

Re: Convertion octets en Mo

Message par Programmes »

Le mid était une bonne solution...J'ai fais ceci:

Code : Tout sélectionner

Taille=63481424
resultat.s=StrF(Taille/(1024*1024),2)
t.s=Mid(resultat,FindString(resultat,".")+2)
r=Val(t)
If r>0 And r<10:Unite=1:Else:Unite=0:EndIf
t.s=Mid(resultat,FindString(resultat,".")+1,1):r=Val(t)
If r>0 And r<10:Dizaine=1:Else:Dizaine=0:EndIf
If Unite>0
    If DIzaine>0:NbDecimale=2:EndIf
ElseIf Dizaine>0
    NbDecimale=1
Else:NbDecimale=0:EndIf
If NbDecimale=2:Txt.s=Left(resultat,FindString(resultat,".")+NbDecimale)
ElseIf NbDecimale=1:Txt.s=Left(resultat,FindString(resultat,".")+NbDecimale)
Else:Txt.s=Left(resultat,FindString(resultat,".")-1):EndIf
çà marche mais je m'empresse d'essayer la solution de MLD.
A+
Répondre