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 |
|
|
| Traduire des nombres en lettres. | |
| | Auteur | Message |
---|
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Traduire des nombres en lettres. Lun 10 Nov 2014 - 10:32 | |
| Bonjour. @Klaus. Que penses-tu de ma sub ci-dessous ? - Code:
-
sub traduire_nombre_allemand_en_lettre(param1)
dim_local nombre, nl$(20), c$, k%, x%, y
nombre=param1
c$="eins zwei drei vier fünf sechs sieben acht neun zehn elf zwölf " c$=c$+"dreizehn vierzehn fünfzehn sechzehn siebzehn achtzehn neunzehn " for k%=1 to 19 nl$(k%)=trim$(mid$(c$,k%*9-8,8)) next k%
a$=""
if param1>999 x%=int(param1/1000) if x%>0 then a$=a$+nl$(x%) a$=a$+"tausend" param1=param1-x%*1000 end_if
if param1>99 x%=int(param1/100) a$=a$+nl$(x%)+"hundert" param1=param1-x%*100 end_if
if param1>19 y=int(param1/10)
b$="" ' Pas de select: bug. if y=2 then b$="zwanzig" if y=3 then b$="dreißig" if y=4 then b$="vierzig" if y=5 then b$="fünfzig" if y=6 then b$="sechzig" if y=7 then b$="siebzig" if y=8 then b$="achtzig" if y=9 then b$="neunzig" end_if
if y>0 if param1-y*10>0 a$=a$+nl$(param1-y*10)+"und" param1=param1-(param1-y*10) end_if if b$<>"" then a$=a$+b$ end_if a$=trim$(a$)
param1=param1-y*10 if param1>0 then a$=a$+nl$(param1)
if left$(a$,3)="und" then a$=right_pos$(a$,4) y%=instr(a$," und") if y%>0 then a$=left$(a$,y%)+right_pos$(a$,y%+4)
' eins devient ein dans un mot composé. while true%=1 y%=instr(a$,"eins") if y%=0 then exit_while if instr("htu",mid$(a$,y%+4,1))>0 then a$=left$(a$,y%+2)+right_pos$(a$,y%+4) end_while
end_sub | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Traduire des nombres en lettres. Lun 10 Nov 2014 - 14:44 | |
| Bien tenté, Pédro. J'ai relevé certaines anomalies dans ta routine (les décalages dans la variable c$ n'étaient pas cohérents, plus quelques petits détails. Et je t'ai fait cadeau d'une double version: nombre normal et année calendaire. Voici le résultat: - Code:
-
dim nombre, true%, x%, y% dim a$, b$ true%=1
traduire_nombre_allemand_en_lettre(1971,0) message "Nombre: '"+a$+"'" traduire_nombre_allemand_en_lettre(1971,1) message "Année: '"+a$+"'" terminate
sub traduire_nombre_allemand_en_lettre(param1,typ%) ' typ%=0 ==> nombre normal ' typ%=1 ==> année calendaire
dim_local nombre, nl$(20), c$, k%, x%, y, c1$, c2$, c3$, c4$, z
nombre=param1
c$= "eins zwei drei vier fünf sechs sieben acht neun zehn elf zwölf " c$=c$+ "dreizehn vierzehn fünfzehn sechzehn siebzehn achtzehn neunzehn 111111111222222222111111111222222222111111111" for k%=1 to 19 nl$(k%)=trim$(mid$(c$,(k%-1)*9+1,9)) next k%
a$=""
if typ%=0 if param1>999 x%=int(param1/1000) if x%>0 if x%>1 c1$ = nl$(x%) else c1$ = "ein" end_if end_if c1$ = c1$ + "tausend" param1=param1-x%*1000 end_if end_if if typ%=1 if param1>99 x% = int(param1/100) if x%>1 then c1$ = nl$(x%) if x%=10 c1$ = "tausend" else c1$ = c1$ + "hunderd" end_if end_if param1=param1-x%*100 end_if
if param1>99 x%=int(param1/100) if x%>1 c2$ = nl$(x%) else c2$ = "ein" end_if c2$ = c2$ + "hundert" param1=param1-x%*100 end_if
if param1>19 y=int(param1/10)
b$="" ' Pas de select: bug. if y=2 then b$="zwanzig" if y=3 then b$="dreißig" if y=4 then b$="vierzig" if y=5 then b$="fünfzig" if y=6 then b$="sechzig" if y=7 then b$="siebzig" if y=8 then b$="achtzig" if y=9 then b$="neunzig" else c4$ = nl$(param1) end_if
z = param1-y*10 if y>0 if z>0 if z>1 c4$ = nl$(z) else c4$ = "ein" end_if end_if if z>0 then c4$ = c4$ + "und" if b$<>"" then c4$ = c4$ + b$ end_if
a$ = c1$ + c2$ + c3$ + c4$
end_sub Amuse-toi bien ! | |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Traduire des nombres en lettres. Lun 10 Nov 2014 - 15:14 | |
| Bonjour..
@Klaus.
Je pense que ta routine comporte un bug.
En faisant un test sur '99', elle affiche zehnundneunzig !!
Alors que la mienne affiche bien neunundneunzig.
Merci de voir. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Traduire des nombres en lettres. Lun 10 Nov 2014 - 15:22 | |
| Chez moi, le résultat est bon. Donc, le problème vient des espaces pour la variable c$ qui sont mangés par le forum. Alors, passe plutôt par des DATA: - Code:
-
dim nombre, true%, x%, y% dim a$, b$ true%=1
traduire_nombre_allemand_en_lettre(99,0) message "Nombre: '"+a$+"'" traduire_nombre_allemand_en_lettre(99,1) message "Année: '"+a$+"'" terminate
sub traduire_nombre_allemand_en_lettre(param1,typ%) ' typ%=0 ==> nombre normal ' typ%=1 ==> année calendaire
dim_local nombre, nl$(20), c$, k%, x%, y, c1$, c2$, c3$, c4$, z
nombre=param1 restore data "eins","zwei","drei","vier","fünf","sechs","sieben" data "acht","neun","zehn","elf","zwölf" data "dreizehn","vierzehn","fünfzehn","sechzehn","siebzehn", data "achtzehn","neunzehn" for k%=1 to 19 read nl$(k%) next k%
a$=""
if typ%=0 if param1>999 x%=int(param1/1000) if x%>0 if x%>1 c1$ = nl$(x%) else c1$ = "ein" end_if end_if c1$ = c1$ + "tausend" param1=param1-x%*1000 end_if end_if if typ%=1 if param1>99 x% = int(param1/100) if x%>1 then c1$ = nl$(x%) if x%=10 c1$ = "tausend" else c1$ = c1$ + "hunderd" end_if end_if param1=param1-x%*100 end_if
if param1>99 x%=int(param1/100) if x%>1 c2$ = nl$(x%) else c2$ = "ein" end_if c2$ = c2$ + "hundert" param1=param1-x%*100 end_if
if param1>19 y=int(param1/10)
b$="" ' Pas de select: bug. if y=2 then b$="zwanzig" if y=3 then b$="dreißig" if y=4 then b$="vierzig" if y=5 then b$="fünfzig" if y=6 then b$="sechzig" if y=7 then b$="siebzig" if y=8 then b$="achtzig" if y=9 then b$="neunzig" else c4$ = nl$(param1) end_if
z = param1-y*10 if y>0 if z>0 if z>1 c4$ = nl$(z) else c4$ = "ein" end_if end_if if z>0 then c4$ = c4$ + "und" if b$<>"" then c4$ = c4$ + b$ end_if
a$ = c1$ + c2$ + c3$ + c4$
end_sub | |
| | | Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: traduire des nombres en lettres. Lun 10 Nov 2014 - 17:07 | |
| @Klaus.
Désolé, mais pour l'année 2014, la sub affiche:
hundertvierzehn
Merci de voir le problème. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Traduire des nombres en lettres. Lun 10 Nov 2014 - 17:25 | |
| Tu as raison. Voici la correction: - Code:
-
dim nombre, true%, x%, y% dim a$, b$ true%=1
traduire_nombre_allemand_en_lettre(1914,0) message "Nombre: '"+a$+"'" traduire_nombre_allemand_en_lettre(1914,1) message "Année: '"+a$+"'" terminate
sub traduire_nombre_allemand_en_lettre(param1,typ%) ' typ%=0 ==> nombre normal ' typ%=1 ==> année calendaire
dim_local nombre, nl$(20), c$, k%, x%, y, c1$, c2$, c3$, c4$, z, t%
nombre=param1 restore data "eins","zwei","drei","vier","fünf","sechs","sieben" data "acht","neun","zehn","elf","zwölf" data "dreizehn","vierzehn","fünfzehn","sechzehn","siebzehn", data "achtzehn","neunzehn" for k%=1 to 19 read nl$(k%) next k% t% = typ% if (typ%=1) and (param1>=2000) then t% = 0
a$=""
if t%=0 if param1>999 x%=int(param1/1000) if x%>0 if x%>1 c1$ = nl$(x%) else c1$ = "ein" end_if end_if c1$ = c1$ + "tausend" param1=param1-x%*1000 end_if end_if if t%=1 if param1>99 x% = int(param1/100) if x%>1 then c1$ = nl$(x%) if x%=10 c1$ = "tausend" else c1$ = c1$ + "hunderd" end_if end_if param1=param1-x%*100 end_if
if param1>99 x%=int(param1/100) if x%>1 c2$ = nl$(x%) else c2$ = "ein" end_if c2$ = c2$ + "hundert" param1=param1-x%*100 end_if
if param1>19 y=int(param1/10)
b$="" ' Pas de select: bug. if y=2 then b$="zwanzig" if y=3 then b$="dreißig" if y=4 then b$="vierzig" if y=5 then b$="fünfzig" if y=6 then b$="sechzig" if y=7 then b$="siebzig" if y=8 then b$="achtzig" if y=9 then b$="neunzig" else c4$ = nl$(param1) end_if
z = param1-y*10 if y>0 if z>0 if z>1 c4$ = nl$(z) else c4$ = "ein" end_if end_if if z>0 then c4$ = c4$ + "und" if b$<>"" then c4$ = c4$ + b$ end_if
a$ = c1$ + c2$ + c3$ + c4$
end_sub | |
| | | Contenu sponsorisé
| Sujet: Re: Traduire des nombres en lettres. | |
| |
| | | | Traduire des nombres en lettres. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |