Accueil > Forum > > > > SVP : J'ai besoin d'aide ! ! !
SVP : J'ai besoin d'aide ! ! !
vendredi 27 décembre 2002 à 15:45:04 |
SVP : J'ai besoin d'aide ! ! !

Neopheus
|
Bonjour, J'ai un p'tit pb. En effet, je voudrais "transformer", dans un string, les chiffres en lettres, mais ceci dans un string qui contient en plus des chiffres des mots voir des phrases. Pour être plus explicite voici un exemple : "monsieur xxx à 3 enfants et 2 filles qui ont chacunes 10 et 14 ans" et le programme doit transformer ça en : "monsieur xxx à trois enfants et deux filles qui ont chacunes dix et quatorze ans" Bien sûr il doit faire ça quelque soit le texte, et quelque soit les nombres( et le nombre qu'il y en est...) Si quelqu'un pourrait m'aider.... Merci d'avance.... VALENTIN Xavier www.darkskull.net xavier.valentin@freesbee.fr
|
|
vendredi 27 décembre 2002 à 15:52:31 |
Re : SVP : J'ai besoin d'aide ! ! !

Neopheus
|
Pour la convertion des chiffres en lettres j'ai ces deux sources que j'ai trouvé, mais je n'arrive tjrs pas à faire mon truc..... Aidez-moi.... Voici les sources : Function TForm1.EnLettres(N:Integer):String;
Const Unite: Array[1..16] of String=('un','deux','trois','quatre','cinq','six', 'sept','huit','neuf','dix','onze','douze', 'treize','quatorze','quinze','seize'); Dizaine: Array[2..8] of String=('vingt','trente','quarante','cinquante', 'soixante','','quatre-vingt'); Coefs:Array[0..3] of String=('cent','mille','million','milliard'); Var Temp: String; C,D,U: Byte; Coef: Byte; I: Word; Neg: Boolean; begin If N = 0 then begin Result := ' Zéro'; Exit; end; Result := ''; Neg := N <0; If Neg then N := -N; Coef := 0; Repeat U := N mod 10; N := N div 10; {Récupère unité et dizaine} D := N mod 10; N := N div 10; {Récupère dizaine} If D in [1,7,9] then begin Dec(D); Inc(U, 10); end; Temp := ''; If D > 1 then begin Temp := ' ' + Dizaine[D]; If (D < 8) and ((U = 1) or (U = 11)) then Temp := Temp + ' et'; end; If U > 16 then begin Temp := Temp + ' ' + Unite[10]; Dec(U,10); end; If U > 0 then Temp := Temp + ' ' + Unite[U]; If (Result = '') and (D = 8) and (U = 0) then Result := 's'; Result := Temp + Result; C := N mod 10; N := N div 10; {Récupère centaine} If C > 0 then begin Temp := ''; If C > 1 then Temp := ' ' + Unite[C] + Temp; Temp := Temp + ' ' + Coefs[0]; If (Result = '') and (C > 1) then Result := 's'; Result := Temp + Result; end; If N > 0 then begin Inc(Coef); I := N mod 1000; If (I > 1) and (Coef > 1) then Result := 's' + Result; If I > 0 then Result := ' ' + Coefs[Coef] + Result; If (I= 1) and (Coef = 1) then Dec(N); end; until N = 0; If Neg then Result := 'Moins' + Result else Result[2] := UpCase (Result[2]); end;
|
et cette source : unit NombreToLettre;
interface
Function SommeEnChaine(Somme : Extended) : String;
const NomUnites : Array[0..19] Of String[10] = ('zéro ','un ','deux ','trois ','quatre ', 'cinq ','six ','sept ','huit ','neuf ', 'dix ','onze ','douze ','treize ','quatorze ', 'quinze ','seize ','dix-sept ','dix-huit ','dix-neuf ' ); NomDizaines : Array[0..9] Of String[13] = ('','dix ','vingt ','trente ','quarante ','cinquante ', 'soixante ','soixante-dix ','quatre-vingt ','quatre-vingt ');
NomCentaines : String[10] = 'cent'; NomMilliers : String[10] = 'mille'; NomMillions : String[10] = 'million';
LiaisonsDizainesUnites = 'et'; {trente ET un} LiaisonUnitesCentiemmes = 'et'; {neuf francs ET quarante centimes}
NomMonaie : String = 'franc'; NomCentiemme : String[10] = 'centime';
{Si vous voulez juste convertir un nombre (et pas de l'argent) il suffit de mettre LiaisonUnitesCentiemmes = 'virgule';
NomMonaie : String = ''; NomCentiemme : String[10] = '';}
implementation
Function SommeEnChaine(Somme : Extended) : String; Var Millions, Milliers, Cents : Word; Fract : Word; So : Extended; Chn : String;
Function RecuperePortion(Diviseur : Integer) : Word; Var R : Extended; DV : Extended; i : Integer;
Begin DV := 1; For i := 1 To Diviseur Do DV := DV*10; R := Trunc(So / Int(DV)); So := So - (R*Int(DV)); RecuperePortion := Trunc(R); End;
Function CentsEnChaine(C : Word;ZeroAussi : Boolean) : String; Var S : String; Ce,Di,Un : Byte; Begin CentsEnChaine := ''; S := ''; Ce := (C Div 100) Mod 10; Di := (C Div 10) Mod 10; Un := (C Mod 10); If C = 0 Then If ZeroAussi Then S := NomUnites[0] Else S := '' Else Begin If Ce > 0 Then Begin If ce > 1 Then Begin S := S + NomUnites[ce]+NomCentaines; If (Di > 0) Or (Un > 0) Then S := S + ' ' Else S := S + 's '; End Else If ce = 1 Then S := NomCentaines+' '; End; If Di > 0 Then Begin Case Di Of 1 : S := S + NomUnites[C Mod 100]; 2,3,4,5,6 : Begin S := S + NomDizaines[Di]; If Un = 1 Then S := S + LiaisonsDizainesUnites+ ' '; If Un > 0 Then S := S + NomUnites[Un]; End; 8 : Begin S := S + NomDizaines[DI]; If Un = 0 Then Insert('s',S,Length(S)) Else S := S + NomUnites[Un]; End; 7,9 : Begin S := S + NomDizaines[Di]; If Un = 1 Then S := S + LiaisonsDizainesUnites+ ' '; S := S + NomUnites[Un+10]; End; End; End Else {DI = 0 -> Pas de dizaines} Begin If Un > 0 Then S := S + NomUnites[Un]; End; End; CentsEnChaine := S; End; function SupprEspace(Str : string) : String; begin Result :=Str; while Pos(' ', result) > 0 do result := copy(result, 1, Pos(' ', result))+ copy(result, Pos(' ', result)+2, length(result)-Pos(' ', result)+2); end;
Begin SommeEnChaine := ''; Chn := ''; Somme := Abs(Somme); Fract := Round(Frac(Somme) * 100); If Fract > 99 Then Begin Fract := 0; Somme := Somme+1; End; So := Somme; Millions := RecuperePortion(6); Milliers := RecuperePortion(3); Cents := Trunc(So); If Millions > 0 Then Begin Chn := CentsEnChaine(Millions,False) + NomMillions; If Millions > 1 Then Chn := Chn + 's'; Chn := Chn + ' '; End; If Milliers > 1 Then Chn := Chn + CentsEnChaine(Milliers,False) + NomMilliers+' ' Else If Milliers = 1 Then Chn := Chn + NomMilliers+' '; Chn := Chn + CentsEnChaine(Cents,(Millions=0) And (Milliers=0)) + NomMonaie; If ((Cents > 1) or (Milliers > 1) or (Millions > 1)) and (NomMonaie <>'') and (NomMonaie[length(NomMonaie)] <>'s') Then Chn := Chn + 's'; If Fract > 0 Then Begin Chn := Chn + ' '+LiaisonUnitesCentiemmes+' ' + CentsEnChaine(Fract,False) + NomCentiemme; If (Fract > 1) and (NomCentiemme<>'') and (NomCentiemme[length(NomCentiemme)] <>'s') Then Chn := Chn + 's'; End; SommeEnChaine := SupprEspace(Chn); End;
end.
|
VALENTIN Xavier www.darkskull.net xavier.valentin@freesbee.fr ------------------------------- Réponse au message : ------------------------------- > Bonjour, > > J'ai un p'tit pb. En effet, je voudrais "transformer", dans un string, les chiffres en lettres, mais ceci dans un string qui contient en plus des chiffres des mots voir des phrases. > > Pour être plus explicite voici un exemple : > > "monsieur xxx à 3 enfants et 2 filles qui ont chacunes 10 et 14 ans" > > et le programme doit transformer ça en : > > "monsieur xxx à trois enfants et deux filles qui ont chacunes dix et quatorze ans" > > Bien sûr il doit faire ça quelque soit le texte, et quelque soit les nombres( et le nombre qu'il y en est...) > > Si quelqu'un pourrait m'aider.... > > Merci d'avance.... > > > > VALENTIN Xavier > www.darkskull.net > xavier.valentin@freesbee.fr >
|
|
vendredi 27 décembre 2002 à 16:11:00 |
Re : SVP : J'ai besoin d'aide ! ! !

Neopheus
|
Me revoilà,
Je n'ai tjrs pas trouvé : Snif !
Je tenais à préciser que les sources que je viens de mettre n'étaient pas de moi, je les ai trouvé sur le Net....
Si vous pouvez m'aider...
|
|
vendredi 27 décembre 2002 à 17:20:09 |
Re : SVP : J'ai besoin d'aide ! ! !

Amadeus
|
Ce qui te pose le plus de problème c'est de récupérer les chiffres dans ton string ('monsieur XXX à 3 enfants ...) Il faudrais que du parcours ton string caractére par carctére (boucle FOR) est que tu regarde s'il s'agit d'un numérique (if s[i] in ['0'..'9'] then) dés que tu trouve un numérique il faut que tu lise les caractères suivants pour voir s'il ne s'agit pas d'un numérique sur plusieus caractères (Ex: 23), puis tu utilise EnLettre et tu fait un stringReplace de la chaine extraite par le résultat de EnLettre. Puis tu parcours le restant de ton string pour voir s'il n'y a pas d'autres chiffres. Je ne sais pas si j'ai été clair. ------------------------------- Réponse au message : ------------------------------- > Pour la convertion des chiffres en lettres j'ai ces deux sources que j'ai trouvé, mais je n'arrive tjrs pas à faire mon truc..... > > Aidez-moi.... > > > Voici les sources : > > > Function TForm1.EnLettres(N:Integer):String; > > Const > Unite: Array[1..16] of String=('un','deux','trois','quatre','cinq','six', > 'sept','huit','neuf','dix','onze','douze', > 'treize','quatorze','quinze','seize'); > Dizaine: Array[2..8] of String=('vingt','trente','quarante','cinquante', > 'soixante','','quatre-vingt'); > Coefs:Array[0..3] of String=('cent','mille','million','milliard'); > Var > Temp: String; > C,D,U: Byte; > Coef: Byte; > I: Word; > Neg: Boolean; > begin > If N = 0 then > begin > Result := ' Zéro'; > Exit; > end; > Result := ''; > Neg := N <0; > If Neg then N := -N; > Coef := 0; > Repeat > U := N mod 10; N := N div 10; {Récupère unité et dizaine} > D := N mod 10; N := N div 10; {Récupère dizaine} > If D in [1,7,9] then > begin > Dec(D); > Inc(U, 10); > end; > Temp := ''; > If D > 1 then > begin > Temp := ' ' + Dizaine[D]; > If (D < 8) and ((U = 1) or (U = 11)) then > Temp := Temp + ' et'; > end; > If U > 16 then > begin > Temp := Temp + ' ' + Unite[10]; > Dec(U,10); > end; > If U > 0 then Temp := Temp + ' ' + Unite[U]; > If (Result = '') and (D = 8) and (U = 0) then Result := 's'; > Result := Temp + Result; > C := N mod 10; N := N div 10; {Récupère centaine} > If C > 0 then > begin > Temp := ''; > If C > 1 then Temp := ' ' + Unite[C] + Temp; > Temp := Temp + ' ' + Coefs[0]; > If (Result = '') and (C > 1) then Result := 's'; > Result := Temp + Result; > end; > If N > 0 then > begin > Inc(Coef); > I := N mod 1000; > If (I > 1) and (Coef > 1) then Result := 's' + Result; > If I > 0 then Result := ' ' + Coefs[Coef] + Result; > If (I= 1) and (Coef = 1) then Dec(N); > end; > until N = 0; > If Neg then Result := 'Moins' + Result > else > Result[2] := UpCase (Result[2]); > end; > |
> > et cette source : > > > > unit NombreToLettre; > > interface > > Function SommeEnChaine(Somme : Extended) : String; > > const > NomUnites : Array[0..19] Of String[10] > = ('zéro ','un ','deux ','trois ','quatre ', > 'cinq ','six ','sept ','huit ','neuf ', > 'dix ','onze ','douze ','treize ','quatorze ', > 'quinze ','seize ','dix-sept ','dix-huit ','dix-neuf ' > ); > NomDizaines : Array[0..9] Of String[13] > = ('','dix ','vingt ','trente ','quarante ','cinquante ', > 'soixante ','soixante-dix ','quatre-vingt ','quatre-vingt '); > > NomCentaines : String[10] = 'cent'; > NomMilliers : String[10] = 'mille'; > NomMillions : String[10] = 'million'; > > LiaisonsDizainesUnites = 'et'; {trente ET un} > LiaisonUnitesCentiemmes = 'et'; {neuf francs ET quarante centimes} > > NomMonaie : String = 'franc'; > NomCentiemme : String[10] = 'centime'; > > {Si vous voulez juste convertir un nombre (et pas de l'argent) il suffit de > mettre > LiaisonUnitesCentiemmes = 'virgule'; > > NomMonaie : String = ''; > NomCentiemme : String[10] = '';} > > implementation > > Function SommeEnChaine(Somme : Extended) : String; > Var > Millions, > Milliers, > Cents : Word; > Fract : Word; > So : Extended; > Chn : String; > > Function RecuperePortion(Diviseur : Integer) : Word; > Var > R : Extended; > DV : Extended; > i : Integer; > > Begin > DV := 1; > For i := 1 To Diviseur Do > DV := DV*10; > R := Trunc(So / Int(DV)); > So := So - (R*Int(DV)); > RecuperePortion := Trunc(R); > End; > > Function CentsEnChaine(C : Word;ZeroAussi : Boolean) : String; > Var > S : String; > Ce,Di,Un : Byte; > Begin > CentsEnChaine := ''; > S := ''; > Ce := (C Div 100) Mod 10; > Di := (C Div 10) Mod 10; > Un := (C Mod 10); > If C = 0 Then > If ZeroAussi Then S := NomUnites[0] > Else S := '' > Else > Begin > If Ce > 0 Then > Begin > If ce > 1 Then > Begin > S := S + NomUnites[ce]+NomCentaines; > If (Di > 0) Or (Un > 0) Then S := S + ' ' > Else S := S + 's '; > End > Else > If ce = 1 Then S := NomCentaines+' '; > End; > If Di > 0 Then > Begin > Case Di Of > 1 : S := S + NomUnites[C Mod 100]; > 2,3,4,5,6 > : Begin > S := S + NomDizaines[Di]; > If Un = 1 Then S := S + LiaisonsDizainesUnites+ ' '; > If Un > 0 Then S := S + NomUnites[Un]; > End; > 8 : Begin > S := S + NomDizaines[DI]; > If Un = 0 Then Insert('s',S,Length(S)) > Else S := S + NomUnites[Un]; > End; > 7,9 > : Begin > S := S + NomDizaines[Di]; > If Un = 1 Then > S := S + LiaisonsDizainesUnites+ ' '; > S := S + NomUnites[Un+10]; > End; > End; > End > Else {DI = 0 -> Pas de dizaines} > Begin > If Un > 0 Then > S := S + NomUnites[Un]; > End; > End; > CentsEnChaine := S; > End; > function SupprEspace(Str : string) : String; > begin > Result :=Str; > while Pos(' ', result) > 0 do > result := copy(result, 1, Pos(' ', result))+ > copy(result, Pos(' ', result)+2, > length(result)-Pos(' ', result)+2); > end; > > Begin > SommeEnChaine := ''; > Chn := ''; > Somme := Abs(Somme); > Fract := Round(Frac(Somme) * 100); > If Fract > 99 Then > Begin > Fract := 0; > Somme := Somme+1; > End; > So := Somme; > Millions := RecuperePortion(6); > Milliers := RecuperePortion(3); > Cents := Trunc(So); > If Millions > 0 Then > Begin > Chn := CentsEnChaine(Millions,False) + NomMillions; > If Millions > 1 Then Chn := Chn + 's'; > Chn := Chn + ' '; > End; > If Milliers > 1 Then > Chn := Chn + CentsEnChaine(Milliers,False) + NomMilliers+' ' > Else > If Milliers = 1 Then > Chn := Chn + NomMilliers+' '; > Chn := Chn + CentsEnChaine(Cents,(Millions=0) And (Milliers=0)) > + NomMonaie; > If ((Cents > 1) or (Milliers > 1) or (Millions > 1)) and (NomMonaie <>'') > and (NomMonaie[length(NomMonaie)] <>'s') Then > Chn := Chn + 's'; > If Fract > 0 Then > Begin > Chn := Chn + ' '+LiaisonUnitesCentiemmes+' ' + CentsEnChaine(Fract,False) + NomCentiemme; > If (Fract > 1) and (NomCentiemme<>'') and (NomCentiemme[length(NomCentiemme)] <>'s') Then Chn := Chn + 's'; > End; > SommeEnChaine := SupprEspace(Chn); > End; > > end. > > |
> > > VALENTIN Xavier > www.darkskull.net > xavier.valentin@freesbee.fr > > > > ------------------------------- > Réponse au message : > ------------------------------- > > > Bonjour, > > > > J'ai un p'tit pb. En effet, je voudrais "transformer", dans un string, les chiffres en lettres, mais ceci dans un string qui contient en plus des chiffres des mots voir des phrases. > > > > Pour être plus explicite voici un exemple : > > > > "monsieur xxx à 3 enfants et 2 filles qui ont chacunes 10 et 14 ans" > > > > et le programme doit transformer ça en : > > > > "monsieur xxx à trois enfants et deux filles qui ont chacunes dix et quatorze ans" > > > > Bien sûr il doit faire ça quelque soit le texte, et quelque soit les nombres( et le nombre qu'il y en est...) > > > > Si quelqu'un pourrait m'aider.... > > > > Merci d'avance.... > > > > > > > > VALENTIN Xavier > > www.darkskull.net > > xavier.valentin@freesbee.fr > > >
|
|
samedi 28 décembre 2002 à 09:33:09 |
Re : SVP : J'ai besoin d'aide ! ! !

Neopheus
|
Merci pour ta réponse, grâce à elle, j'ai réussi ! Merci encore... VALENTIN Xavier www.darkskull.net xavier.valentin@freesbee.fr ------------------------------- Réponse au message : ------------------------------- > Ce qui te pose le plus de problème c'est de récupérer les chiffres dans ton string ('monsieur XXX à 3 enfants ...) > Il faudrais que du parcours ton string caractére par carctére (boucle FOR) est que tu regarde s'il s'agit d'un numérique (if s[i] in ['0'..'9'] then) dés que tu trouve un numérique il faut que tu lise les caractères suivants pour voir s'il ne s'agit pas d'un numérique sur plusieus caractères (Ex: 23), puis tu utilise EnLettre et tu fait un stringReplace de la chaine extraite par le résultat de EnLettre. Puis tu parcours le restant de ton string pour voir s'il n'y a pas d'autres chiffres. > > Je ne sais pas si j'ai été clair. > > > ------------------------------- > Réponse au message : > ------------------------------- > > > Pour la convertion des chiffres en lettres j'ai ces deux sources que j'ai trouvé, mais je n'arrive tjrs pas à faire mon truc..... > > > > Aidez-moi.... > > > > > > Voici les sources : > > > > > > Function TForm1.EnLettres(N:Integer):String; > > > > Const > > Unite: Array[1..16] of String=('un','deux','trois','quatre','cinq','six', > > 'sept','huit','neuf','dix','onze','douze', > > 'treize','quatorze','quinze','seize'); > > Dizaine: Array[2..8] of String=('vingt','trente','quarante','cinquante', > > 'soixante','','quatre-vingt'); > > Coefs:Array[0..3] of String=('cent','mille','million','milliard'); > > Var > > Temp: String; > > C,D,U: Byte; > > Coef: Byte; > > I: Word; > > Neg: Boolean; > > begin > > If N = 0 then > > begin > > Result := ' Zéro'; > > Exit; > > end; > > Result := ''; > > Neg := N <0; > > If Neg then N := -N; > > Coef := 0; > > Repeat > > U := N mod 10; N := N div 10; {Récupère unité et dizaine} > > D := N mod 10; N := N div 10; {Récupère dizaine} > > If D in [1,7,9] then > > begin > > Dec(D); > > Inc(U, 10); > > end; > > Temp := ''; > > If D > 1 then > > begin > > Temp := ' ' + Dizaine[D]; > > If (D < 8) and ((U = 1) or (U = 11)) then > > Temp := Temp + ' et'; > > end; > > If U > 16 then > > begin > > Temp := Temp + ' ' + Unite[10]; > > Dec(U,10); > > end; > > If U > 0 then Temp := Temp + ' ' + Unite[U]; > > If (Result = '') and (D = 8) and (U = 0) then Result := 's'; > > Result := Temp + Result; > > C := N mod 10; N := N div 10; {Récupère centaine} > > If C > 0 then > > begin > > Temp := ''; > > If C > 1 then Temp := ' ' + Unite[C] + Temp; > > Temp := Temp + ' ' + Coefs[0]; > > If (Result = '') and (C > 1) then Result := 's'; > > Result := Temp + Result; > > end; > > If N > 0 then > > begin > > Inc(Coef); > > I := N mod 1000; > > If (I > 1) and (Coef > 1) then Result := 's' + Result; > > If I > 0 then Result := ' ' + Coefs[Coef] + Result; > > If (I= 1) and (Coef = 1) then Dec(N); > > end; > > until N = 0; > > If Neg then Result := 'Moins' + Result > > else > > Result[2] := UpCase (Result[2]); > > end; > > |
> > > > et cette source : > > > > > > > > unit NombreToLettre; > > > > interface > > > > Function SommeEnChaine(Somme : Extended) : String; > > > > const > > NomUnites : Array[0..19] Of String[10] > > = ('zéro ','un ','deux ','trois ','quatre ', > > 'cinq ','six ','sept ','huit ','neuf ', > > 'dix ','onze ','douze ','treize ','quatorze ', > > 'quinze ','seize ','dix-sept ','dix-huit ','dix-neuf ' > > ); > > NomDizaines : Array[0..9] Of String[13] > > = ('','dix ','vingt ','trente ','quarante ','cinquante ', > > 'soixante ','soixante-dix ','quatre-vingt ','quatre-vingt '); > > > > NomCentaines : String[10] = 'cent'; > > NomMilliers : String[10] = 'mille'; > > NomMillions : String[10] = 'million'; > > > > LiaisonsDizainesUnites = 'et'; {trente ET un} > > LiaisonUnitesCentiemmes = 'et'; {neuf francs ET quarante centimes} > > > > NomMonaie : String = 'franc'; > > NomCentiemme : String[10] = 'centime'; > > > > {Si vous voulez juste convertir un nombre (et pas de l'argent) il suffit de > > mettre > > LiaisonUnitesCentiemmes = 'virgule'; > > > > NomMonaie : String = ''; > > NomCentiemme : String[10] = '';} > > > > implementation > > > > Function SommeEnChaine(Somme : Extended) : String; > > Var > > Millions, > > Milliers, > > Cents : Word; > > Fract : Word; > > So : Extended; > > Chn : String; > > > > Function RecuperePortion(Diviseur : Integer) : Word; > > Var > > R : Extended; > > DV : Extended; > > i : Integer; > > > > Begin > > DV := 1; > > For i := 1 To Diviseur Do > > DV := DV*10; > > R := Trunc(So / Int(DV)); > > So := So - (R*Int(DV)); > > RecuperePortion := Trunc(R); > > End; > > > > Function CentsEnChaine(C : Word;ZeroAussi : Boolean) : String; > > Var > > S : String; > > Ce,Di,Un : Byte; > > Begin > > CentsEnChaine := ''; > > S := ''; > > Ce := (C Div 100) Mod 10; > > Di := (C Div 10) Mod 10; > > Un := (C Mod 10); > > If C = 0 Then > > If ZeroAussi Then S := NomUnites[0] > > Else S := '' > > Else > > Begin > > If Ce > 0 Then > > Begin > > If ce > 1 Then > > Begin > > S := S + NomUnites[ce]+NomCentaines; > > If (Di > 0) Or (Un > 0) Then S := S + ' ' > > Else S := S + 's '; > > End > > Else > > If ce = 1 Then S := NomCentaines+' '; > > End; > > If Di > 0 Then > > Begin > > Case Di Of > > 1 : S := S + NomUnites[C Mod 100]; > > 2,3,4,5,6 > > : Begin > > S := S + NomDizaines[Di]; > > If Un = 1 Then S := S + LiaisonsDizainesUnites+ ' '; > > If Un > 0 Then S := S + NomUnites[Un]; > > End; > > 8 : Begin > > S := S + NomDizaines[DI]; > > If Un = 0 Then Insert('s',S,Length(S)) > > Else S := S + NomUnites[Un]; > > End; > > 7,9 > > : Begin > > S := S + NomDizaines[Di]; > > If Un = 1 Then > > S := S + LiaisonsDizainesUnites+ ' '; > > S := S + NomUnites[Un+10]; > > End; > > End; > > End > > Else {DI = 0 -> Pas de dizaines} > > Begin > > If Un > 0 Then > > S := S + NomUnites[Un]; > > End; > > End; > > CentsEnChaine := S; > > End; > > function SupprEspace(Str : string) : String; > > begin > > Result :=Str; > > while Pos(' ', result) > 0 do > > result := copy(result, 1, Pos(' ', result))+ > > copy(result, Pos(' ', result)+2, > > length(result)-Pos(' ', result)+2); > > end; > > > > Begin > > SommeEnChaine := ''; > > Chn := ''; > > Somme := Abs(Somme); > > Fract := Round(Frac(Somme) * 100); > > If Fract > 99 Then > > Begin > > Fract := 0; > > Somme := Somme+1; > > End; > > So := Somme; > > Millions := RecuperePortion(6); > > Milliers := RecuperePortion(3); > > Cents := Trunc(So); > > If Millions > 0 Then > > Begin > > Chn := CentsEnChaine(Millions,False) + NomMillions; > > If Millions > 1 Then Chn := Chn + 's'; > > Chn := Chn + ' '; > > End; > > If Milliers > 1 Then > > Chn := Chn + CentsEnChaine(Milliers,False) + NomMilliers+' ' > > Else > > If Milliers = 1 Then > > Chn := Chn + NomMilliers+' '; > > Chn := Chn + CentsEnChaine(Cents,(Millions=0) And (Milliers=0)) > > + NomMonaie; > > If ((Cents > 1) or (Milliers > 1) or (Millions > 1)) and (NomMonaie <>'') > > and (NomMonaie[length(NomMonaie)] <>'s') Then > > Chn := Chn + 's'; > > If Fract > 0 Then > > Begin > > Chn := Chn + ' '+LiaisonUnitesCentiemmes+' ' + CentsEnChaine(Fract,False) + NomCentiemme; > > If (Fract > 1) and (NomCentiemme<>'') and (NomCentiemme[length(NomCentiemme)] <>'s') Then Chn := Chn + 's'; > > End; > > SommeEnChaine := SupprEspace(Chn); > > End; > > > > end. > > > > |
> > > > > > VALENTIN Xavier > > www.darkskull.net > > xavier.valentin@freesbee.fr > > > > > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > Bonjour, > > > > > > J'ai un p'tit pb. En effet, je voudrais "transformer", dans un string, les chiffres en lettres, mais ceci dans un string qui contient en plus des chiffres des mots voir des phrases. > > > > > > Pour être plus explicite voici un exemple : > > > > > > "monsieur xxx à 3 enfants et 2 filles qui ont chacunes 10 et 14 ans" > > > > > > et le programme doit transformer ça en : > > > > > > "monsieur xxx à trois enfants et deux filles qui ont chacunes dix et quatorze ans" > > > > > > Bien sûr il doit faire ça quelque soit le texte, et quelque soit les nombres( et le nombre qu'il y en est...) > > > > > > Si quelqu'un pourrait m'aider.... > > > > > > Merci d'avance.... > > > > > > > > > > > > VALENTIN Xavier > > > www.darkskull.net > > > xavier.valentin@freesbee.fr > > > > > >
|
|
mardi 13 mai 2003 à 17:05:15 |
Re : SVP : J'ai besoin d'aide ! ! !

Brain
|
Utilise pour ca les expressions régulières qui te retrouverons toutes les séries de chiffres http://anso.virtualave.net ------------------------------- Réponse au message : ------------------------------- > Ce qui te pose le plus de problème c'est de récupérer les chiffres dans ton string ('monsieur XXX à 3 enfants ...) > Il faudrais que du parcours ton string caractére par carctére (boucle FOR) est que tu regarde s'il s'agit d'un numérique (if s[i] in ['0'..'9'] then) dés que tu trouve un numérique il faut que tu lise les caractères suivants pour voir s'il ne s'agit pas d'un numérique sur plusieus caractères (Ex: 23), puis tu utilise EnLettre et tu fait un stringReplace de la chaine extraite par le résultat de EnLettre. Puis tu parcours le restant de ton string pour voir s'il n'y a pas d'autres chiffres. > > Je ne sais pas si j'ai été clair. > > > ------------------------------- > Réponse au message : > ------------------------------- > > > Pour la convertion des chiffres en lettres j'ai ces deux sources que j'ai trouvé, mais je n'arrive tjrs pas à faire mon truc..... > > > > Aidez-moi.... > > > > > > Voici les sources : > > > > > > Function TForm1.EnLettres(N:Integer):String; > > > > Const > > Unite: Array[1..16] of String=('un','deux','trois','quatre','cinq','six', > > 'sept','huit','neuf','dix','onze','douze', > > 'treize','quatorze','quinze','seize'); > > Dizaine: Array[2..8] of String=('vingt','trente','quarante','cinquante', > > 'soixante','','quatre-vingt'); > > Coefs:Array[0..3] of String=('cent','mille','million','milliard'); > > Var > > Temp: String; > > C,D,U: Byte; > > Coef: Byte; > > I: Word; > > Neg: Boolean; > > begin > > If N = 0 then > > begin > > Result := ' Zéro'; > > Exit; > > end; > > Result := ''; > > Neg := N <0; > > If Neg then N := -N; > > Coef := 0; > > Repeat > > U := N mod 10; N := N div 10; {Récupère unité et dizaine} > > D := N mod 10; N := N div 10; {Récupère dizaine} > > If D in [1,7,9] then > > begin > > Dec(D); > > Inc(U, 10); > > end; > > Temp := ''; > > If D > 1 then > > begin > > Temp := ' ' + Dizaine[D]; > > If (D < 8) and ((U = 1) or (U = 11)) then > > Temp := Temp + ' et'; > > end; > > If U > 16 then > > begin > > Temp := Temp + ' ' + Unite[10]; > > Dec(U,10); > > end; > > If U > 0 then Temp := Temp + ' ' + Unite[U]; > > If (Result = '') and (D = 8) and (U = 0) then Result := 's'; > > Result := Temp + Result; > > C := N mod 10; N := N div 10; {Récupère centaine} > > If C > 0 then > > begin > > Temp := ''; > > If C > 1 then Temp := ' ' + Unite[C] + Temp; > > Temp := Temp + ' ' + Coefs[0]; > > If (Result = '') and (C > 1) then Result := 's'; > > Result := Temp + Result; > > end; > > If N > 0 then > > begin > > Inc(Coef); > > I := N mod 1000; > > If (I > 1) and (Coef > 1) then Result := 's' + Result; > > If I > 0 then Result := ' ' + Coefs[Coef] + Result; > > If (I= 1) and (Coef = 1) then Dec(N); > > end; > > until N = 0; > > If Neg then Result := 'Moins' + Result > > else > > Result[2] := UpCase (Result[2]); > > end; > > |
> > > > et cette source : > > > > > > > > unit NombreToLettre; > > > > interface > > > > Function SommeEnChaine(Somme : Extended) : String; > > > > const > > NomUnites : Array[0..19] Of String[10] > > = ('zéro ','un ','deux ','trois ','quatre ', > > 'cinq ','six ','sept ','huit ','neuf ', > > 'dix ','onze ','douze ','treize ','quatorze ', > > 'quinze ','seize ','dix-sept ','dix-huit ','dix-neuf ' > > ); > > NomDizaines : Array[0..9] Of String[13] > > = ('','dix ','vingt ','trente ','quarante ','cinquante ', > > 'soixante ','soixante-dix ','quatre-vingt ','quatre-vingt '); > > > > NomCentaines : String[10] = 'cent'; > > NomMilliers : String[10] = 'mille'; > > NomMillions : String[10] = 'million'; > > > > LiaisonsDizainesUnites = 'et'; {trente ET un} > > LiaisonUnitesCentiemmes = 'et'; {neuf francs ET quarante centimes} > > > > NomMonaie : String = 'franc'; > > NomCentiemme : String[10] = 'centime'; > > > > {Si vous voulez juste convertir un nombre (et pas de l'argent) il suffit de > > mettre > > LiaisonUnitesCentiemmes = 'virgule'; > > > > NomMonaie : String = ''; > > NomCentiemme : String[10] = '';} > > > > implementation > > > > Function SommeEnChaine(Somme : Extended) : String; > > Var > > Millions, > > Milliers, > > Cents : Word; > > Fract : Word; > > So : Extended; > > Chn : String; > > > > Function RecuperePortion(Diviseur : Integer) : Word; > > Var > > R : Extended; > > DV : Extended; > > i : Integer; > > > > Begin > > DV := 1; > > For i := 1 To Diviseur Do > > DV := DV*10; > > R := Trunc(So / Int(DV)); > > So := So - (R*Int(DV)); > > RecuperePortion := Trunc(R); > > End; > > > > Function CentsEnChaine(C : Word;ZeroAussi : Boolean) : String; > > Var > > S : String; > > Ce,Di,Un : Byte; > > Begin > > CentsEnChaine := ''; > > S := ''; > > Ce := (C Div 100) Mod 10; > > Di := (C Div 10) Mod 10; > > Un := (C Mod 10); > > If C = 0 Then > > If ZeroAussi Then S := NomUnites[0] > > Else S := '' > > Else > > Begin > > If Ce > 0 Then > > Begin > > If ce > 1 Then > > Begin > > S := S + NomUnites[ce]+NomCentaines; > > If (Di > 0) Or (Un > 0) Then S := S + ' ' > > Else S := S + 's '; > > End > > Else > > If ce = 1 Then S := NomCentaines+' '; > > End; > > If Di > 0 Then > > Begin > > Case Di Of > > 1 : S := S + NomUnites[C Mod 100]; > > 2,3,4,5,6 > > : Begin > > S := S + NomDizaines[Di]; > > If Un = 1 Then S := S + LiaisonsDizainesUnites+ ' '; > > If Un > 0 Then S := S + NomUnites[Un]; > > End; > > 8 : Begin > > S := S + NomDizaines[DI]; > > If Un = 0 Then Insert('s',S,Length(S)) > > Else S := S + NomUnites[Un]; > > End; > > 7,9 > > : Begin > > S := S + NomDizaines[Di]; > > If Un = 1 Then > > S := S + LiaisonsDizainesUnites+ ' '; > > S := S + NomUnites[Un+10]; > > End; > > End; > > End > > Else {DI = 0 -> Pas de dizaines} > > Begin > > If Un > 0 Then > > S := S + NomUnites[Un]; > > End; > > End; > > CentsEnChaine := S; > > End; > > function SupprEspace(Str : string) : String; > > begin > > Result :=Str; > > while Pos(' ', result) > 0 do > > result := copy(result, 1, Pos(' ', result))+ > > copy(result, Pos(' ', result)+2, > > length(result)-Pos(' ', result)+2); > > end; > > > > Begin > > SommeEnChaine := ''; > > Chn := ''; > > Somme := Abs(Somme); > > Fract := Round(Frac(Somme) * 100); > > If Fract > 99 Then > > Begin > > Fract := 0; > > Somme := Somme+1; > > End; > > So := Somme; > > Millions := RecuperePortion(6); > > Milliers := RecuperePortion(3); > > Cents := Trunc(So); > > If Millions > 0 Then > > Begin > > Chn := CentsEnChaine(Millions,False) + NomMillions; > > If Millions > 1 Then Chn := Chn + 's'; > > Chn := Chn + ' '; > > End; > > If Milliers > 1 Then > > Chn := Chn + CentsEnChaine(Milliers,False) + NomMilliers+' ' > > Else > > If Milliers = 1 Then > > Chn := Chn + NomMilliers+' '; > > Chn := Chn + CentsEnChaine(Cents,(Millions=0) And (Milliers=0)) > > + NomMonaie; > > If ((Cents > 1) or (Milliers > 1) or (Millions > 1)) and (NomMonaie <>'') > > and (NomMonaie[length(NomMonaie)] <>'s') Then > > Chn := Chn + 's'; > > If Fract > 0 Then > > Begin > > Chn := Chn + ' '+LiaisonUnitesCentiemmes+' ' + CentsEnChaine(Fract,False) + NomCentiemme; > > If (Fract > 1) and (NomCentiemme<>'') and (NomCentiemme[length(NomCentiemme)] <>'s') Then Chn := Chn + 's'; > > End; > > SommeEnChaine := SupprEspace(Chn); > > End; > > > > end. > > > > |
> > > > > > VALENTIN Xavier > > www.darkskull.net > > xavier.valentin@freesbee.fr > > > > > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > Bonjour, > > > > > > J'ai un p'tit pb. En effet, je voudrais "transformer", dans un string, les chiffres en lettres, mais ceci dans un string qui contient en plus des chiffres des mots voir des phrases. > > > > > > Pour être plus explicite voici un exemple : > > > > > > "monsieur xxx à 3 enfants et 2 filles qui ont chacunes 10 et 14 ans" > > > > > > et le programme doit transformer ça en : > > > > > > "monsieur xxx à trois enfants et deux filles qui ont chacunes dix et quatorze ans" > > > > > > Bien sûr il doit faire ça quelque soit le texte, et quelque soit les nombres( et le nombre qu'il y en est...) > > > > > > Si quelqu'un pourrait m'aider.... > > > > > > Merci d'avance.... > > > > > > > > > > > > VALENTIN Xavier > > > www.darkskull.net > > > xavier.valentin@freesbee.fr > > > > > >
|
|
Cette discussion est classée dans : aide, string, chiffres, transformer, monsieur
Répondre à ce message
Sujets en rapport avec ce message
Comment transformer un buffer non typé en string [ par bjl ]
Bonjour, je vourais transformer un buffer non typé en string.Je sais le faire avec un stream mais je pense qu'il dois y avoir plus simple et rapide.Av
Comment transformer un tableau de caractères en string (le tableau peut contenir des caractères nuls au début...) ? [ par warezpsx ]
J'ai besoin d'aide (pour améliorer la performance de mon brute force) : Savez-vous comment faire pour convertir un tableau de caractères en string (le
transformer un OleVariant en String [ par kalif ]
bonjour je suis un peu débutant dans delphi et je voudrai savoir comment faire lorsqu'on a Winsock.getdata MAVARIABLEle résultat est en OleVariantcomm
Diiférencier les chiffres des lettres dans une string? [ par kwentinn ]
Salut tt le monde!J'aimerais savoir s'il est possible de différencier les chiffres des lettres dans une string. Si oui, comment faire? Y'a-t-il une fo
Transformer un string en Tframe et inversement [ par develomagaly ]
Bonjour,Je vous explique en deux mots mon problème :Voila, je recupere à partir d'une base de données le nom d'une fenêtre à afficher ( donc il s'agit
Utlisation des attributs de la classe 1 de unit1 dans unit2 [ par emidelphi ]
le thread repond a ma question mais j'ai essayer ce que vous avez decris mais ca marche pas . j'ai le classe suivante dans unit1 : Classe1 = class(TOb
pointeurs [ par plusweb ]
Bonjour,j'aurai besoin d'aide concernant les pointeurs...C'est ma deuxieme année de pratique de delphi et j'attaque les pointeurs... J'ai trois exos a
L'appel de l'aide depuis une application recompilée en Delphi 2005 donne une erreur [ par JustForNous ]
En Delphi2005, en renseignant juste Application.HelpFile et en appelant Application.HelpContext(x); j'ai toujours le message d’erreur : "Aucune aide
Tfilestream : problème de lecture du fichier [ par bv94 ]
Bonsoir,mon problème est le suivant : je créé un type Toperation qui hérite de Tfilestream. Mais les fonctions de tfilestream que j'utilise (read, see
Identifiant refuser dans un shellexecute [ par Francky23012301 ]
Salut,Dans la procédure ci-dessous, il y a un erreur de compilation : le second nil semble posser problème. Je pense que le probleme vient de la vari
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Hero
Entre 550€ et 550€
|