Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Convertir un nombre d'octets en ko/Mo/Go/To/Po/Eo/Zo ou kio/Mio/Gio/Tio/Pio/Eio/Zio
#1
En raison de problèmes d'interprétation du forum avec certains caractères, je donne un lien vers ma page :
http://www.boulets.oqp.me/tcl/routines/t...-0003.html
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#2
Je ne suis pas tout à fait d'accord. Il s'agit là du calcul binaire et non SI, donc les unités sont Kio, Mio, Tio et Pio.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Répondre
#3
 
Tu as entièrement raison, n'hésite pas à corriger / améliorer.
 
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#4
J'aurais bien vu:

tcl
proc octet_formatting {value {SI 1}} {
   if { $SI == 1 } {
      set base 1024
      set u { Kio Gio Tio Pio }
   } else {
      set base 1000
      set u { Ko Go To Po }
   }
   if { $value < $base } { return "$value octets" }
   foreach unit $u {
      set value [expr {$value / $base.} ]
      if { $value < $base } {
         return "[format %1.2f $value]$unit"
      }
   }
}


Et pis voila :)
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Répondre
#5
Nouvelles améliorations de la routine :
- le $base. de la version précédente provoquait une erreur
- ajout de préfixes supplémentaires pour les grands nombres
- correction Ko en ko

tcl
proc octet_formatting {value {SI 1}} {
	if { $SI } {
		set base 1024
		set units {Kio Mio Gio Tio Pio Eio Zio}
	} else {
		set base 1000
		set units {Ko Mo Go To Po Eo Zo}
	}   
	if { $value < $base } { return "${value}o" }
	foreach unit $units {
		set value [expr {$value / ($base / 1.0)} ]
		if { $value < $base } {
			return "[format %1.2f $value]$unit"
		}
	}
}


Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#6
Suite à la demande de McDeffice sur IRC, le pendant de la fonction:
tcl
proc form2oct {formated} {
	set usi {kio Mio Gio Tio Pio Eio Zio}
	set units {ko Mo Go To Po Eo Zo}
	set base 1000
	regexp {([0-9\.]+)(\w+)} $formated - s u
	if {$u in $usi} {
		set units $usi
		set base 1024
	}
	for {set i [lsearch $units $u]} {$i>=0} {incr i -1} {
		set s [expr $s * $base]
	}
	return $s
}


irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Afficher les séparateurs de milliers dans un nombre MenzAgitat 0 3,227 29/01/2015, 22:10
Dernier message: MenzAgitat
  Convertir des nombres entre différentes bases numériques MenzAgitat 0 4,112 23/07/2014, 17:57
Dernier message: MenzAgitat
  Convertir des entités HTML MenzAgitat 1 4,852 11/11/2013, 11:19
Dernier message: CrazyCat
  Convertir des codes de style mIRC en HTML MenzAgitat 0 3,372 11/10/2013, 00:31
Dernier message: MenzAgitat

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)