Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/manuel/dgnumf.htm


  D o m i n i q u e   G u e b e y    J u n g l e    Bazar informatique

DGNUMF - traducteurs nombres-mots

Présentation

Ceci est un prototype.

Cette page propose un module de traduction d’un nombre en une expression en français. Ecrit en REXX, il est portable sur un très grand nombre d’ordinateurs, notamment les systèmes IBM.

Ce programme est respectueux de l’orthographe (règles d’application du pluriel à vingt et cent) et des conventions typographiques (separation par tirets pour "quatre-vingt…") ; grâce à des paramètres, il connaît la terminologie belgo-suisse ("nonante"…), accepte le féminin ("…et une"), et supporte facultativement la notion d’unité (exemple : "EUROS") utilisée en place du terme "virgule" s’il y a des décimales.

Ce programme respecte le nombre des décimales (.50 donnera "VIRGULE (ou unité paramétrée) CINQUANTE", et non pas "VIRGULE CINQ"), fonctionnalité indispensable pour certaines applications (édition de chèques par exemple).

Commentaires du listing

#! /usr/bin/rexx
/* - Pour les systemes UNIX ou Gnu/LINUX, verifier et adapter la        */
/* premiere ligne ci-dessus                                             */
/* ******************************************                           */
/* DGNUMF v-0.9.99 - CONVERTISSEUR NOMBRES-MOTS                         */
/* Copyright 2002 Dominique Guebey                                      */
/* ******************************************                           */
/* Ce programme a pour fonction la conversion d'un nombre en            */
/* une proposition en francais. Voir exemples plus bas                  */
/* ******************************************                           */
/* CONDITIONS D'UTILISATION                                             */
/* Ce programme est offert sans aucune garantie de fonctionnement.      */
/* Ce programme est librement utilisable, modifiable et diffusable,     */
/* meme contre paiement, sous la condition que les memes termes seront  */
/* applicables a la version ainsi distribuee.                           */
/* ******************************************                           */
/* PARTICULARITES : language REXX, utilisation des fonctions            */
/* integrees LENGTH, SUBSTR et TRUNC.                                   */
/* La presente version s'applique a des nombres limites a :             */
/* - 9 chiffres pour les entiers ;                                      */
/* - 8 chiffres pour les nombres negatifs ou avec decimales ;           */
/* - 7 chiffres pour les nombres negatifs et avec decimales.            */
/* Pour des longeurs superieures, le comportement peut varier selon     */
/* l'interpreteur utilise.                                              */
/* ******************************************                           */
/* PARAMETRES :                                                         */
/* 0- "num" : nombre a traiter ; attention, le programme ne             */
/* verifie pas si la chaine de caracteres est numerique                 */
/* 1- "param1" : "b" si belgo-suisse ("septante…"), sinon tout autre  */
/* caractere ; facultatif si parametres suivants non utilises.          */
/* 2- "param2" : "f" si feminin ("une"), sinon tout autre caractere ;   */
/* facultatif si parametre suivant non utilise.                         */
/* 3- "param3" : unite facultative ("EURO", "KILO", "BANANE"), a defaut */
/* le mot "VIRGULE" sera insere entre les unites et decimales.          */
/* ******************************************                           */
/* EXEMPLES                                                             */
/* 19.5 -> "DIX NEUF VIRGULE CINQ"                                      */
/* 19.50 x x EURO -> "DIX NEUF EUROS CINQUANTE"                         */
/* 91 b f BANANE -> "NONANTE ET UNE BANANES"                            */
/* 93 x x CHEVAL -> "QUATRE-VINGT-TREIZE CHEVAUX"                       */
/* 93 x x CHACAL -> "QUATRE-VINGT-TREIZE CHACALS"                       */
/* -101101 x f -> "MOINS CENT UN MILLE CENT UNE"                        */
/* ******************************************                           */
/* VERSION 0.9.9 :                                                      */
/* - optimisation : traitement commun partie entiere/partie decimale.   */
/* - nombres en quatre-vingt : separation par tirets et non pas espaces */
/* - gestion amelioree du pluriel de l'unite :                          */
/*      - correction : pas de "s" ajoute si deja s ou x a la fin de     */
/*      l'unite                                                         */
/*      - test ameliore (mots en al et ail…)                          */
/*      - plus besoin du 4e parametre                                   */
/* VERSION 0.9.99 :                                                     */
/* - en cas d'erreur, retourne la valeur entree et non pas null.        */
/* - largeur des lignes limitee a 80 caracteres (facilite sur AS400)    */
/* ******************************************                           */

Installation et lancement sur AS400

Attention : en cas de modification du source sur PC : il ne doit y avoir aucun caractère de tabulation, mais uniquement des espaces. Noter que certains éditeurs (Jext, Notetab) ont une fonction de remplacement des tabulations par des espaces.

Sur l’AS400 création éventuelle du fichier source (sinon un fichier physique sera créé au lieu d’un membre source) : CRTSRCPF   FILE([nom bibliothèque]/QREXSRC)   [Entrée] Nota : La valeur RCDLEN=132 n’est plus nécessaire depuis la version 0.9.99 (la valeur par défaut (92) tronquait les lignes auparavant).

Sur le PC : envoi à l’AS400 par FTP : Sous DOS/"invite de commande" :

Sur l’AS400 : Sous PDM, changer le type du membre, de blanc en "REXX".

Lancement : Exemple ci-dessous, à l’aide d’un CL :

/* PARAMETRE 1 (ENTREE) UNIQUE ZONE CONTENANT LES PARAMETRES   */
/*       PASSES AU MODULE REXX, SEPARES PAR UN BLANC :    */
/* - NOMBRE, EXEMPLE : -124.2 (OBLIGATOIRE)     */
/* - BELGO/SUISSE : "B" SINON AUTRE NON BLANC ("X") (OBLIGATOIRE) */
/* - FEMININ : "F" SINON AUTRE NON BLANC ("X") (OBLIGATOIRE)   */
/* - UNITE AU SINGULIER (FACULTATIF) SINON OU AURA "VIRGULE"   */
/* PARAMETRE 2 (PHRASE) BLANC EN ENTREE                           */
PGM PARM(&ENTREE &PHRASE)

DCL &ENTREE TYPE(*CHAR) LEN(32)
DCL &PHRASE TYPE(*CHAR) LEN(128)
DCL &BLANC  TYPE(*CHAR) LEN(128)
CHGDTAARA DTAARA(*LDA (201 128)) VALUE(&BLANC)

STRREXPRC  DGNUMF400 SRCFILE(MGNEW/QREXSRC) PARM(&ENTREE)
MONMSG CPF0000
RTVDTAARA  DTAARA(*LDA (201 128)) RTNVAR(&PHRASE)

/*                POUR DEMONSTRATION                              */
DSPDTAARA  DTAARA(*LDA)
ENDPGM