Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Autre tentative de mise en forme des nombres | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Autre tentative de mise en forme des nombres Jeu 28 Jan 2010 - 15:28 | |
| Bonjour, Dans la série des outils pour mettre des nombres en forme, je voudrais aussi apporter ma modeste contribution. J'ai fait un sous-programme appelé format-nombre qui prend entrée 3 variables: format_nbr type float nombre à formatter format_maxdec% nombre maxi de décimales (5 semble raisonnable) format_frm$ type string format à utiliser Dans le format, on peut mettre n'importe quel texte. Seuls 4 caractères spéciaux sont remplacés: # est remplacé par un chiffre ° est remplacé par un chiffre ou un espace pour des zéros DEVANT le premier chiffre significatif µ est remplacé par un espace pour des nombres positifs ou un tiret "-" pour des nombres négatifs , (la virgule) représente obligatoirement la virgule décimale Je mets le source complet ci-après. Dans les commentaires, il y a une documentation complète et des indications comment intégrer cette routine dans un programme existant. Il s'agit d'un programme complet pour tester la routine avec une form pour saisir les infos et voir le résultat. Désolé pour le résultat: ne n'ai pas réussi à préserver des indentations du code lors de l'insertion, ni la mise en forme des commentaires. C'est pourqui j'ai inséré des "..........." entre le format et le résultat dans les exemples - cela devrait être des espaces. Mais au moins, c'est lisible. Voilà: - Citation :
rem ------------------------------------------------------- rem Test de la routine FORMAT_nombre rem rem Seuls les labels et variables avec le préfixe format_ rem font partie du code utile et doivent être inclus dans rem un programme utilisant cette routine. Voir la routine rem format_nombre pour le mode d emploi. rem
label execute_format, window, objets, execute_test dim test_st$, test_n%, test_err%
label format_nombre dim format_nbr, format_frm$, format_out$, format_in$ dim format_maxdec%, format_nbr_virg%, format_frm_virg%, format_neg$ dim format_i%, format_j%, format_car$ rem On peut modifier ne nombre maximales de décimales à volonté: format_maxdec% = 5
gosub window gosub objets
end
window: left 0,223 top 0,182 width 0,380 height 0,250 caption 0,"Function FORMAT" return
objets: alpha 11 left 11,31 top 11,20 width 11,80 height 11,20 caption 11,"Nombre:" edit 1 left 1,131 top 1,20
alpha 12 left 12,31 top 12,50 width 12,80 height 12,20 caption 12,"Décimales maxi:" edit 2 left 2,131 top 2,50 width 2,40 alpha 13 left 13,31 top 13,80 width 13,80 height 13,20 caption 13,"Format:" edit 3 left 3,131 top 3,80 width 3,220 button 4 left 4,131 top 4,120 caption 4,"Appliquer" on_click 4,execute_format
alpha 15 left 15,31 top 15,160 width 15,80 height 15,20 caption 15,"Résultat:" alpha 5 left 5,131 top 5,160 width 5,220 height 5,20 return
rem ------------------------------------------------------------------------ rem Cette routine effectue la mise en forme de un nombre rem Le première partie ne sert que à contrôler les paramètres rem ------------------------------------------------------------------------ execute_format: gosub execute_test if test_err%=0 then gosub format_nombre return rem ----------------------------------------------------------------------- rem ici on a la partie de vérification des paramètres rem à la sortie, les variables suivantes sont chargées: rem format_nbr nombre réel à convertir rem format_dec% nombre de décimales (entre 0 et 5) rem format_frm$ masque de formattage rem ----------------------------------------------------------------------- execute_test: test_err% = 1 test_st$ = text$(1) test_n% = instr(test_st$,",") if test_n%>0 then test_st$ = left$(test_st$,test_n%-1)+"."+right$(test_st$,len(test_st$)-test_n%) if numeric(test_st$)=0 message "Le nombre est invalide !" return end_if format_nbr = val(test_st$) test_st$ = text$(2) if numeric(test_st$)=0 message "Le nombre de décimales maxi doit être numérique !" return end_if format_maxdec% = val(test_st$) format_frm$ = text$(3) test_err% = 0 return
rem ---------------------------------------------------------------------- rem ici on a la partie utile du code rem en entrée, les variables suivantes doivent être chargées: rem format_nbr nombre réel à convertir rem format_maxdec% nombre de décimales maxi (5 est raisonnable) rem format_frm$ masque de formattage rem Le masque de formattage peut contenir n importe quelle chaîne de rem caractères. Les caractères #, °, µ et la virgule sont réservés: rem # est remplacé par un chiffre rem ° est remplacé par un chiffre ou un espace rem µ est remplacé par "-" si le nombre est négatif, sinon espace rem , représente l emplacement da la virgule décimale rem rem Exemples: (le signe ^ représente un espace) rem Nombre: -12,3456 rem Format.................................Résultat rem --------------------------------------------------------------- rem ###,##...............................012,34 rem °°°#,####...........................^^12,3400 rem Avant:^°°#^Après:^###...... Avant:^^12^Après:^340 rem µ###,##..............................-012,34 rem °#,##^µ..............................12,34^- rem #......................................... 2 rem rem Nombre: 12072009 (12 Juillet 2009) rem Format..............................Résultat rem --------------------------------------------------------------- rem °#/##/####....................12/07/2010 rem ##-^#-####...................12-^7-2010 rem rem ---------------------------------------------------------------------- format_nombre: format_out$ = "" format_neg$ = " " if format_nbr<0 then format_neg$ = "-" format_in$ = string$(20,"°")+str$(format_nbr) format_nbr_virg% = instr(format_in$,".") if format_nbr_virg%=0 format_in$ = format_in$ + "," format_nbr_virg% = len(format_in$) end_if format_in$ = format_in$ + string$(format_maxdec%,"0") format_frm_virg% = instr(format_frm$,",") if format_frm_virg%=0 format_frm$ = format_frm$ + "," format_frm_virg% = len(format_frm$) end_if format_j% = format_nbr_virg% for format_i%=format_frm_virg%-1 to 1 step -1 format_car$ = mid$(format_frm$,format_i%,1) if format_car$="#" format_j% = format_j% - 1 format_car$ = mid$(format_in$,format_j%,1) if format_car$="°" then format_car$ = "0" format_out$ = format_car$ + format_out$ else if format_car$="°" format_j% = format_j% - 1 format_car$ = mid$(format_in$,format_j%,1) if numeric(format_car$)=0 then format_car$ = " " format_out$ = format_car$ + format_out$ else if format_car$="µ" format_out$ = format_neg$ + format_out$ else format_out$ = format_car$ + format_out$ end_if end_if end_if next format_i% if format_frm_virg%<len(format_frm$) format_out$ = format_out$ + "," format_j% = format_nbr_virg% for format_i%=format_frm_virg%+1 to len(format_frm$) format_car$ = mid$(format_frm$,format_i%,1) if format_car$="#" format_j% = format_j% + 1 format_car$ = mid$(format_in$,format_j%,1) if format_car$="°" then format_car$ = "0" format_out$ = format_out$+ format_car$ else if format_car$="°" format_j% = format_j% + 1 format_car$ = mid$(format_in$,format_j%,1) if numeric(format_car$)=0 then format_car$ = " " format_out$ = format_out$ + format_car$ else if format_car$="µ" format_out$ = format_out$ + format_neg$ else format_out$ = format_out$ + format_car$ end_if end_if end_if next format_i% end_if caption 5,format_out$ return
J'espère que cela pourra aider quelqu'un... [ | |
| | | Invité Invité
| Sujet: Re: Autre tentative de mise en forme des nombres Jeu 28 Jan 2010 - 15:48 | |
| Merci pour ta participation sur le forum, et les efforts que tu fais. Comme pour Jean Claude, je ne regarderai que plus tard. Trop de chose à la fois. @+ |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Jeu 28 Jan 2010 - 21:05 | |
| Une autre façon de faire, Merci Klaus pour ta participation. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Autre tentative de mise en forme des nombres Jeu 28 Jan 2010 - 22:25 | |
| Belle et intéressante contribution ! c'est toujours enrichissant de voir la façon de faire des autres. Merci. Pour les indentations, bizarre qu'elles aient disparu si elles ont été faites avec des espaces ? (avec des tab ça ne marche pas je crois). | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Jeu 28 Jan 2010 - 23:51 | |
| Merci pour vos encouragements. Ca fai plaisir.
Pour les indentations, j'ai fait un copier/coller à partir de l'éditeur Panoramic; au moment de la constitution du post, tout semblait bon, mais dès la visualisation, les indentations sont perdues. Sous l'éditeur, elles sont faites par des espaces, car TAB ne marche pas sour l'éditeur (on sort du champs de texte source...). Donc, je ne sais pas comment faire.
Je me suis aperçu que j'ai oubllié un petit élément important dans la "documentation": à la fin de la routine, le nombre converti se trouve dans la variable format_out (je sais, pas très original); c'est d'ailleurs cette variable qui pour les besoins des tests charge la caption de mon alpha numéro 5 (cette ligne ne fait bien sûr pas partie du code à reprendre dans une autre application).
Bonne nuit à tous Klaus | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 8:54 | |
| Question: c'est quoi indentation ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 9:07 | |
| J'ai encore écris trop vite, j'ai pas suffisamment le réflexe Wikipédia. - Citation :
- L'indentation est l'action qui permet d'ajouter des caractères de tabulations ou d'espaces dans un fichier texte.
Très souvent utilisée en programmation, elle rend le code source plus clair et plus lisible. Il existe plusieurs styles d'indentation et des outils comme la commande Unix indent qui permettent d'automatiser cette tâche de refactoring. La plupart des éditeurs de texte pour programmeurs prennent également en charge cette opération. Par exemple, avec l'éditeur de texte Vim, on se rendra à la première ligne à indenter, tapera « = » et se rendra à la dernière ligne à indenter, par exemple, on tapera 1G=G pour indenter tout le document.
Extrait du code de Linux avec son indentation originale
if (unlikely(prev->policy == SCHED_RR)) { if (!prev->counter) { prev->counter = NICE_TO_TICKS(prev->nice); move_last_runqueue(prev); } } switch (prev->state) { case TASK_INTERRUPTIBLE: if (signal_pending(prev)) { prev->state = TASK_RUNNING; break; } default: del_from_runqueue(prev); case TASK_RUNNING:; } prev->need_resched = 0;
Le même code après suppression de son indentation
if (unlikely(prev->policy == SCHED_RR)) if (!prev->counter) { prev->counter = NICE_TO_TICKS(prev->nice); move_last_runqueue(prev); } switch (prev->state) { case TASK_INTERRUPTIBLE: if (signal_pending(prev)) { prev->state = TASK_RUNNING; break; } default: del_from_runqueue(prev); case TASK_RUNNING:; } prev->need_resched = 0;
Dans certains langages de programmation (Haskell, Python…), l'indentation a un sens spécifique (p.ex. la délimitation des blocs, rôle tenu par les accolades dans l'exemple en C ci-dessus), alors que dans les autres elle est ignorée et n'a d'utilité que pour les programmeurs humains. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 9:19 | |
| J'étais en train de rédiger une petite sxplication sur l'indentation, et j'ai vu ton post complémentaire. Mais tu vous, tu n'arrives pas non plus à préserver l'indentation... Alors, comment on fait ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 9:53 | |
| Petit complément: j'ai ajouté ce programme dans mon stockage en ligne sur www.box.net où tout le monde peut le télécharger (gratuitement bien sûr). L'indentation y est préservé et on peut ouvrir le fichier directement dans l'éditeur. Si vous êtes intéressés, envoyez-moi un message et je vous enverrai le lien. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 15:08 | |
| Finalement, c'est tout simple pourquoi tu as perdu les indentations: tu as utilisé la balise 'Citer' au lieu de la balise 'Code' ! Et Jean-Claude aussi, enfin, Jean-Claude, un vieux routier comme toi ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 15:25 | |
| MERCI ! J'aurais dû faire plus d'essais ! Donc, voici le source en format "joli": - Code:
-
rem ------------------------------------------------------- rem Test de la routine FORMAT_nombre rem rem Seuls les labels et variables avec le préfixe format_ rem font partie du code utile et doivent être inclus dans rem un programme utilisant cette routine. Voir la routine rem format_nombre pour le mode d emploi. rem
label execute_format, window, objets, execute_test dim test_st$, test_n%, test_err%
label format_nombre dim format_nbr, format_frm$, format_out$, format_in$ dim format_maxdec%, format_nbr_virg%, format_frm_virg%, format_neg$ dim format_i%, format_j%, format_car$ rem On peut modifier ne nombre maximales de décimales à volonté: format_maxdec% = 5
gosub window gosub objets
end
window: left 0,223 top 0,182 width 0,380 height 0,250 caption 0,"Function FORMAT" return
objets: alpha 11 left 11,31 top 11,20 width 11,80 height 11,20 caption 11,"Nombre:" edit 1 left 1,131 top 1,20
alpha 12 left 12,31 top 12,50 width 12,80 height 12,20 caption 12,"Décimales maxi:" edit 2 left 2,131 top 2,50 width 2,40 alpha 13 left 13,31 top 13,80 width 13,80 height 13,20 caption 13,"Format:" edit 3 left 3,131 top 3,80 width 3,220 button 4 left 4,131 top 4,120 caption 4,"Appliquer" on_click 4,execute_format
alpha 15 left 15,31 top 15,160 width 15,80 height 15,20 caption 15,"Résultat:" alpha 5 left 5,131 top 5,160 width 5,220 height 5,20 return
rem ------------------------------------------------------------------------ rem Cette routine effectue la mise en forme de un nombre rem Le première partie ne sert que à contrôler les paramètres rem ------------------------------------------------------------------------ execute_format: gosub execute_test if test_err%=0 gosub format_nombre caption 5,format_out$ return end_if rem ----------------------------------------------------------------------- rem ici on a la partie de vérification des paramètres rem à la sortie, les variables suivantes sont chargées: rem format_nbr nombre réel à convertir rem format_dec% nombre de décimales (entre 0 et 5) rem format_frm$ masque de formattage rem ----------------------------------------------------------------------- execute_test: test_err% = 1 test_st$ = text$(1) test_n% = instr(test_st$,",") if test_n%>0 then test_st$ = left$(test_st$,test_n%-1)+"."+right$(test_st$,len(test_st$)-test_n%) if numeric(test_st$)=0 message "Le nombre est invalide !" return end_if format_nbr = val(test_st$) test_st$ = text$(2) if numeric(test_st$)=0 message "Le nombre de décimales maxi doit être numérique !" return end_if format_maxdec% = val(test_st$) format_frm$ = text$(3) test_err% = 0 return
rem ---------------------------------------------------------------------- rem ici on a la partie utile du code rem en entrée, les variables suivantes doivent être chargées: rem format_nbr nombre réel à convertir rem format_maxdec% nombre de décimales maxi (5 est raisonnable) rem format_frm$ masque de formattage rem Le masque de formattage peut contenir n importe quelle chaîne de rem caractères. Les caractères #, °, µ et la virgule sont réservés: rem # est remplacé par un chiffre rem ° est remplacé par un chiffre ou un espace rem µ est remplacé par "-" si le nombre est négatif, sinon espace rem , représente l emplacement da la virgule décimale rem rem Exemples: (le signe ^ représente un espace) rem Nombre: -12,3456 rem Format Résultat rem --------------------------------------------------------------- rem ###,## 012,34 rem °°°#,#### ^^12,3400 rem Avant:^°°#^Après:^### Avant:^^12^Après:^340 rem µ###,## -012,34 rem °#,##^µ 12,34^- rem # 2 rem rem Nombre: 12072009 (12 Juillet 2009) rem Format Résultat rem --------------------------------------------------------------- rem °#/##/#### 12/07/2010 rem ##-^#-#### 12-^7-2010 rem rem Au retour, le nombre formatté est dans la variable format_out$ rem rem ---------------------------------------------------------------------- format_nombre: format_out$ = "" format_neg$ = " " if format_nbr<0 then format_neg$ = "-" format_in$ = string$(20,"°")+str$(format_nbr) format_nbr_virg% = instr(format_in$,".") if format_nbr_virg%=0 format_in$ = format_in$ + "," format_nbr_virg% = len(format_in$) end_if format_in$ = format_in$ + string$(format_maxdec%,"0") format_frm_virg% = instr(format_frm$,",") if format_frm_virg%=0 format_frm$ = format_frm$ + "," format_frm_virg% = len(format_frm$) end_if format_j% = format_nbr_virg% for format_i%=format_frm_virg%-1 to 1 step -1 format_car$ = mid$(format_frm$,format_i%,1) if format_car$="#" format_j% = format_j% - 1 format_car$ = mid$(format_in$,format_j%,1) if format_car$="°" then format_car$ = "0" format_out$ = format_car$ + format_out$ else if format_car$="°" format_j% = format_j% - 1 format_car$ = mid$(format_in$,format_j%,1) if numeric(format_car$)=0 then format_car$ = " " format_out$ = format_car$ + format_out$ else if format_car$="µ" format_out$ = format_neg$ + format_out$ else format_out$ = format_car$ + format_out$ end_if end_if end_if next format_i% if format_frm_virg%<len(format_frm$) format_out$ = format_out$ + "," format_j% = format_nbr_virg% for format_i%=format_frm_virg%+1 to len(format_frm$) format_car$ = mid$(format_frm$,format_i%,1) if format_car$="#" format_j% = format_j% + 1 format_car$ = mid$(format_in$,format_j%,1) if format_car$="°" then format_car$ = "0" format_out$ = format_out$+ format_car$ else if format_car$="°" format_j% = format_j% + 1 format_car$ = mid$(format_in$,format_j%,1) if numeric(format_car$)=0 then format_car$ = " " format_out$ = format_out$ + format_car$ else if format_car$="µ" format_out$ = format_out$ + format_neg$ else format_out$ = format_out$ + format_car$ end_if end_if end_if next format_i% end_if return
Merci pour ton aide ! Je retiendrai la leçon !
Dernière édition par Klaus le Sam 30 Jan 2010 - 8:38, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 21:01 | |
| D' abord JL35 je suis pas vieux, je suis dans la catégorie ancien jeune, NA !
Merci Klaus, davoir rectifié ton programme, mais ne te laisse pas entraîner par le vieux machin de JL35.
A+ Nananerre ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 21:04 | |
| à Klaus, il y a une erreur dans ton nouveau code. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Autre tentative de mise en forme des nombres Ven 29 Jan 2010 - 21:26 | |
| le vieux machin il te dit... bien le bonsoir (il est poli, lui). Y'a plus de respect. Quel exemple déplorable pour les nouveaux ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Sam 30 Jan 2010 - 0:05 | |
| A Jean-Claude:
Une erreur est toujours possible. Peux-tu m'en dire plus ? Je corrigerai bien sûr ! Une erreur de compil ? Un cas de nombre qui ne passe pas ? Un plantage en exécution ? Toute anomalie sera corrigée. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Sam 30 Jan 2010 - 7:27 | |
| Il manque END IF à la ligne 95.
JL35, je plaisante. Bien sur que je te respecte.
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Sam 30 Jan 2010 - 8:44 | |
| MERCI ! J'ai corrigé. Voilà ce que c'est que de vouloir apporter une dernière touche au programme et de ne pas tout retester après... En fait, j'ai déplacé l'affichage caption 5,format_out$ du sous-programme format_nombre (où il n'avait rien à faire); donc, moon if then s'est transformé en if tout court et jai oublié le end_if. Ca m'apprendra à être plus rigoureux. Le source est mis à jour dans le post et sur www.box.net. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: + Sam 30 Jan 2010 - 12:06 | |
| A mon avis, l'erreur est dans le « Résultat » qui est curieux. PS : Ah non, il n'y a pas d'erreur, c'est parce que je n'avais pas lu les commentaires internes au programme et que j'avais mis un chiffre à Format. Avec #####,## ça marche. C'est vrai que c'est un joli travail (j'avoue que je ne suis pas un fana de comptabilité) ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Sam 30 Jan 2010 - 13:01 | |
| Il y a une chose qui est super dans ce code, c'est que le formatage du nombre peut-être une date. C'est bien fait, çà mérite un Bravo. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Autre tentative de mise en forme des nombres Sam 30 Jan 2010 - 14:56 | |
| Jean-Claude, je le sais bien que tu plaisantais, et j'espère bien que tu me connais assez pour savoir que je le sais. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Autre tentative de mise en forme des nombres Sam 30 Jan 2010 - 15:00 | |
| Oui, une date, ou toute autre information nécessitant un formattage particulier, comme par exemple: - Code:
-
un numéro de téléphone: 0123456789 format "tél. ##.##.##.##.##" ce qui produira: tél. 01.23.45.67.89
un numéro de sécurité sociale: 149059912345678 format "SS. #.##.##.##.###.###.##' ce qui produira: SS. 1.49.05.99.123.456.78
Vous noterez que j'ai inclus un libéllé dans le format - moins d'instructions d'affichage ou d'impression. Regardez le post de Jack de ce jour, dans la rubrique des souhaits pour PANORAMIC, série INCLUDE. Pour montrer l'usage de cette directive #INCLUDE et pour rendre l'utilisation de ma routine de formattage plus facile, voici le contenu de mon fichier INCLUDE_FORMAT_nombre.bas qui peut être ajouté à tout programme par la directive - Code:
-
#INCLUDE "INCLUDE_FORMAT_nombre.bas"
Voici le source complet: - Code:
-
label format_nombre dim format_nbr, format_frm$, format_out$, format_in$ dim format_maxdec%, format_nbr_virg%, format_frm_virg%, format_neg$ dim format_i%, format_j%, format_car$
rem On peut modifier ne nombre maximales de décimales à volonté: format_maxdec% = 5
rem ---------------------------------------------------------------------- rem ici on a la partie utile du code rem en entrée, les variables suivantes doivent être chargées: rem format_nbr nombre réel à convertir rem format_maxdec% nombre de décimales maxi (5 est raisonnable) rem format_frm$ masque de formattage rem Le masque de formattage peut contenir n importe quelle chaîne de rem caractères. Les caractères #, °, µ et la virgule sont réservés: rem # est remplacé par un chiffre rem ° est remplacé par un chiffre ou un espace rem µ est remplacé par "-" si le nombre est négatif, sinon espace rem , représente l emplacement da la virgule décimale rem rem Exemples: (le signe ^ représente un espace) rem Nombre: -12,3456 rem Format Résultat rem --------------------------------------------------------------- rem ###,## 012,34 rem °°°#,#### ^^12,3400 rem Avant:^°°#^Après:^### Avant:^^12^Après:^340 rem µ###,## -012,34 rem °#,##^µ 12,34^- rem # 2 rem rem Nombre: 12072009 (12 Juillet 2009) rem Format Résultat rem --------------------------------------------------------------- rem °#/##/#### 12/07/2010 rem ##-^#-#### 12-^7-2010 rem rem Au retour, le nombre formatté est dans la variable format_out$ rem rem ---------------------------------------------------------------------- format_nombre: format_out$ = "" format_neg$ = " " if format_nbr<0 then format_neg$ = "-" format_in$ = string$(20,"°")+str$(format_nbr) format_nbr_virg% = instr(format_in$,".") if format_nbr_virg%=0 format_in$ = format_in$ + "," format_nbr_virg% = len(format_in$) end_if format_in$ = format_in$ + string$(format_maxdec%,"0") format_frm_virg% = instr(format_frm$,",") if format_frm_virg%=0 format_frm$ = format_frm$ + "," format_frm_virg% = len(format_frm$) end_if format_j% = format_nbr_virg% for format_i%=format_frm_virg%-1 to 1 step -1 format_car$ = mid$(format_frm$,format_i%,1) if format_car$="#" format_j% = format_j% - 1 format_car$ = mid$(format_in$,format_j%,1) if format_car$="°" then format_car$ = "0" format_out$ = format_car$ + format_out$ else if format_car$="°" format_j% = format_j% - 1 format_car$ = mid$(format_in$,format_j%,1) if numeric(format_car$)=0 then format_car$ = " " format_out$ = format_car$ + format_out$ else if format_car$="µ" format_out$ = format_neg$ + format_out$ else format_out$ = format_car$ + format_out$ end_if end_if end_if next format_i% if format_frm_virg%<len(format_frm$) format_out$ = format_out$ + "," format_j% = format_nbr_virg% for format_i%=format_frm_virg%+1 to len(format_frm$) format_car$ = mid$(format_frm$,format_i%,1) if format_car$="#" format_j% = format_j% + 1 format_car$ = mid$(format_in$,format_j%,1) if format_car$="°" then format_car$ = "0" format_out$ = format_out$+ format_car$ else if format_car$="°" format_j% = format_j% + 1 format_car$ = mid$(format_in$,format_j%,1) if numeric(format_car$)=0 then format_car$ = " " format_out$ = format_out$ + format_car$ else if format_car$="µ" format_out$ = format_out$ + format_neg$ else format_out$ = format_out$ + format_car$ end_if end_if end_if next format_i% end_if return
| |
| | | Contenu sponsorisé
| Sujet: Re: Autre tentative de mise en forme des nombres | |
| |
| | | | Autre tentative de mise en forme des nombres | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |