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 :
https://boulets.eggdrop.fr/tcl/routines/...-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.
  Reply
#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.
zeolia: tchat gratuit, sans inscription ni publicité
Merci de ne pas demander d'aide en MP
Away
  Reply
#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.
  Reply
#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 :)
zeolia: tchat gratuit, sans inscription ni publicité
Merci de ne pas demander d'aide en MP
Away
  Reply
#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.
  Reply
#6
Suite à la demande de ZarTek 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
}

zeolia: tchat gratuit, sans inscription ni publicité
Merci de ne pas demander d'aide en MP
Away
  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Afficher les séparateurs de milliers dans un nombre MenzAgitat 0 3,531 29/01/2015, 22:10
Last Post: MenzAgitat
  Convertir des nombres entre différentes bases numériques MenzAgitat 0 4,416 23/07/2014, 17:57
Last Post: MenzAgitat
  Convertir des entités HTML MenzAgitat 1 5,267 11/11/2013, 11:19
Last Post: CrazyCat
  Convertir des codes de style mIRC en HTML MenzAgitat 0 3,694 11/10/2013, 00:31
Last Post: MenzAgitat

Forum Jump:


Users browsing this thread: 1 Guest(s)