Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите / 10 сообщений из 10, страница 1 из 1
04.09.2003, 15:12
    #32255965
Dimasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
Народ подскажите как число преобразовать в число прописью
...
Рейтинг: 0 / 0
04.09.2003, 15:17
    #32255976
gek
gek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
http://www.delphimaster.ru/
...
Рейтинг: 0 / 0
04.09.2003, 15:19
    #32255984
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
Чигооо?
Как-нибудь по-другому вопрос сформулировать можно?
...
Рейтинг: 0 / 0
04.09.2003, 15:49
    #32256035
Dimasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
Дело в следующем, надо в отчете (Freereport) вывести сумму прописью
...
Рейтинг: 0 / 0
04.09.2003, 16:01
    #32256055
CrazyMihey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
Хе-хе, есть модуль собственнописанный. Поддерживает целые числа до Int64, мужской/женский род, русский/английский язык.
SymbolicNumbers.Pas:
Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
Unit SymbolicNumbers;

                   INTERFACE
 Uses SysUtils ;

 Type
  TGender = ( gMale, gFemale ) ;
  TSymbols = Record
              Digits : Array[ 0 .. 9 , 0 .. 1 ] of String ;
              Dec1s : Array[ 0 .. 9 ] of String ;
              Decs : Array[ 0 .. 9 ] of String ;
              Huns : Array[ 0 .. 9 ] of String ;
              Thousands : Array[ 0 .. 2 ] of String ;
              Millions : Array[ 0 .. 2 ] of String ;
              Milliards : Array[ 0 .. 2 ] of String ;
              Trillions : Array[ 0 .. 2 ] of String ;
              CurrDivider : String ;
             End ;

 Const
  RussianStrings : TSymbols =
   (Digits :
     ( ( 'ноль', 'ноль' ),
       ( 'один', 'одна' ),
       ( 'два', 'две' ),
       ( 'три', 'три' ),
       ( 'четыре', 'четыре' ),
       ( 'пять', 'пять' ),
       ( 'шесть', 'шесть' ),
       ( 'семь', 'семь' ),
       ( 'восемь', 'восемь' ),
       ( 'девять', 'девять' )
     ) ;
    Dec1s :
     ( 'десять',
       'одиннадцать',
       'двенадцать',
       'тринадцать',
       'четырнадцать',
       'пятнадцать',
       'шестнадцать',
       'семнадцать',
       'восемнадцать',
       'девятнадцать' ) ;
    Decs :
     ( '',
       '',
       'двадцать',
       'тридцать',
       'сорок',
       'пятьдесят',
       'шестьдесят',
       'семьдесят',
       'восемьдесят',
       'девяносто' ) ;
    Huns :
     ( '',
       'сто',
       'двести',
       'триста',
       'четыреста',
       'пятьсот',
       'шестьсот',
       'семьсот',
       'восемьсот',
       'девятьсот' ) ;
    Thousands :
     ( 'тысяч',
       'тысяча',
       'тысячи' ) ;
    Millions :
     ( 'миллионов',
       'миллион',
       'миллиона' ) ;
    Milliards :
     ( 'миллиардов',
       'миллиард',
       'миллиарда' ) ;
    Trillions :
     ( 'триллионов',
       'триллион',
       'триллиона' ) ;
    CurrDivider :
     'и' ;
   ) ;
  EnglishStrings : TSymbols =
   (Digits :
     ( ( 'zero', 'zero' ),
       ( 'one', 'one' ),
       ( 'two', 'two' ),
       ( 'three', 'three' ),
       ( 'four', 'four' ),
       ( 'five', 'five' ),
       ( 'six', 'six' ),
       ( 'seven', 'seven' ),
       ( 'eight', 'eight' ),
       ( 'nine', 'nine' )
     ) ;
    Dec1s :
     ( 'ten',
       'eleven',
       'twelve',
       'thirteen',
       'fourteen',
       'fifteen',
       'sixteen',
       'seventeen',
       'eighteen',
       'nineteen' ) ;
    Decs :
     ( '',
       '',
       'twenty',
       'thirty',
       'fourty',
       'fifty',
       'sixty',
       'seventy',
       'eighty',
       'ninety' ) ;
    Huns :
     ( '',
       'one hundred',
       'two hundred',
       'three hundred',
       'four hundred',
       'five hundred',
       'six hundred',
       'seven hundred',
       'eight hundred',
       'nine hundred' ) ;
    Thousands :
     ( 'thousand',
       'thousand',
       'thousand' ) ;
    Millions :
     ( 'million',
       'million',
       'million' ) ;
    Milliards :
     ( 'milliard',
       'milliard',
       'milliard' ) ;
    Trillions :
     ( 'trillion',
       'trillion',
       'trillion' ) ;
    CurrDivider :
     'and' ;
   ) ;

 Var
  Gender : TGender = gMale ;
  Strings : TSymbols ;

 Function IntegerToText( N : Integer ) : String ; OverLoad ;
 Function IntegerToText( N : Int64 ) : String ; OverLoad ;
 Function CurrencyToText( N : Currency ) : String ;

                 IMPLEMENTATION

 Function Digit2String( S : String; G : TGender ) : String ;
  BEGIN           { Digit2String }
   Result := Strings.Digits[Ord( S[ 1 ] ) - Ord('0'), Ord( G )] ;
  END ;           { Digit2String }
 { --------------------------------------------------------------------------}
 

 Function Dec12String( C : Char ) : String ;
  BEGIN           { Digit12String }
   Result := Strings.Dec1s[Ord( C ) - Ord('0')] ;
  END ;           { Digit12String }
 { --------------------------------------------------------------------------}
 

 Function Dec2String( C : Char ) : String ;
  BEGIN           { Dec2String }
   Result := Strings.Decs[Ord( C ) - Ord('0')] ;
  END ;           { Dec2String }
 { --------------------------------------------------------------------------}
 

 Function Hun2String( C : Char ) : String ;
  BEGIN           { Hun2String }
   Result := Strings.Huns[Ord( C ) - Ord('0')] ;
  END ;           { Hun2String }
 { --------------------------------------------------------------------------}
 

 Function Triad( S : String; G : TGender ) : String ;
  Var
   R : String ;
  BEGIN             { Triad }
   Case Length( S ) of
      1  : Result := Digit2String( S, G ) ;
      2  : Case S[ 1 ] of
          '1' : Result := Dec12String( S[ 2 ] ) ;
          else Begin
                Result := Dec2String( S[ 1 ] ) ;
                IF S[ 2 ] <> '0'
                 then
                  IF Length( Result ) >  0 
                   then Result := Result + ' ' + Digit2String( S[ 2 ], G )
                   else Result := Digit2String( S[ 2 ], G )
                 else ;
               End ;
         End ;
      3  : Begin
          R := Hun2String( S[ 1 ] ) ;
          IF Length( R ) >  0 
           then Result := R + ' ' + Triad( Copy( S,  2 ,  2 ), G )
           else Result := Triad( Copy( S,  2 ,  2 ), G ) ;
         End ;
    else Result := ''
   End ; { Case }
  END ;             { Triad }
 { --------------------------------------------------------------------------}
 

 Function Ind( S : String ) : Byte ;
  Var
   L : Word ;
  BEGIN           { Ind }
   L := Length( S ) ;
   IF ( L =  1  ) or ( S[Pred( L )] <> '1' )
    then
     Case S[L] of
      '0'      : Result :=  0  ;
      '1'      : Result :=  1  ;
      '2'..'4' : Result :=  2  ;
      '5'..'9' : Result :=  0  ;
      else Result :=  0  ;
     End
    else Result :=  0  ;
  END ;           { Ind }
 { --------------------------------------------------------------------------}
 

 Function Sym2Text( S : String ) : String ;
  Var
   L      : Word ;
   Le, Ri : String ;
   R      : String ;
  BEGIN         { Sym2Text }
   Case Length( S ) of
           0  : Begin
               Result := '' ;
              End ;
        1 .. 3  : Begin
               Result := Triad( S, Gender ) ;
              End ;
        4 .. 6  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 3  ) ;
               Ri := Copy( S, Succ( L- 3  ),  3  ) ;
               R := Triad( Le, gFemale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Thousands[ Ind( Le ) ] + ' ' + Triad( Ri, Gender )
                else Result := Triad( Ri, Gender ) ;
              End ;
        7 .. 9  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 6  ) ;
               Ri := Copy( S, Succ( L- 6  ),  6  ) ;
               R := Triad( Le, gMale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Millions[ Ind( Le ) ] + ' ' + Sym2Text( Ri )
                else Result := Sym2Text( Ri ) ;
              End ;
      10 .. 12  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 9  ) ;
               Ri := Copy( S, Succ( L- 9  ),  9  ) ;
               R := Triad( Le, gMale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Milliards[ Ind( Le ) ] + ' ' + Sym2Text( Ri )
                else Result := Sym2Text( Ri ) ;
              End ;
      13 .. 15  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 12  ) ;
               Ri := Copy( S, Succ( L- 12  ),  12  ) ;
               R := Triad( Le, gMale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Trillions[ Ind( Le ) ] + ' ' + Sym2Text( Ri )
                else Result := Sym2Text( Ri ) ;
              End ;
     else Result := '' ;
   End ; { Case }
  END ;         { Sym2Text }
 { --------------------------------------------------------------------------}
 

 Function IntegerToText( N : Integer ) : String ;
  BEGIN         { IntegerToText }
   Result := Sym2Text( IntToStr( N ) ) ;
  END ;         { IntegerToText }
 { --------------------------------------------------------------------------}
 

 Function IntegerToText( N : Int64 ) : String ;
  BEGIN         { IntegerToText }
   Result := Sym2Text( IntToStr( N ) ) ;
  END ;         { IntegerToText }
 { --------------------------------------------------------------------------}
 

 Function CurrencyToText( N : Currency ) : String ;
  Var
   S : String ;
   i : Word ;
  BEGIN         { CurrencyToText }
   S := FormatCurr( '0.00', N ) ;
   i := Pos( ',', S ) ;
   Result := Sym2Text( Copy( S,  1 , i- 1  ) ) ;
   IF Length( Copy( S, i+ 1 ,  2  ) ) >  0 
    then Result := Result + ' ' + Strings.CurrDivider + ' ' + Copy( S, i+ 1 ,  2  ) + '/100'
    else ;
  END ;         { CurrencyToText }

END .


Перед использованием необходимо установить значение двух глобальных переменных этого модуля, к примеру, вот так:
Код: plaintext
1.
2.
  Gender := gMale ;
  Strings := RussianStrings ;

2 Moderator: Извиняюсь за длинное сообщение, Мыло у меня коряво работает...
...
Рейтинг: 0 / 0
04.09.2003, 16:10
    #32256088
Dimasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
Офигеть спасибо шас попробую
...
Рейтинг: 0 / 0
04.09.2003, 16:20
    #32256110
Dimasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
А как бороться с кодировкой текста
...
Рейтинг: 0 / 0
04.09.2003, 16:23
    #32256115
CrazyMihey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
Не понял?
С этой страницы вставляешь в Delphi или в другой редактор в кодировке Windows-1251 .
...
Рейтинг: 0 / 0
04.09.2003, 16:26
    #32256124
Dimasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
А все глюк большое спасибо
...
Рейтинг: 0 / 0
04.09.2003, 17:07
    #32256212
Dimasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите
Как из отчета (freereport) вызвать фунцию или
в отчет передать переменную
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]