Autor Beitrag
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Mi 12.11.08 22:24 
Integer in Worte konvertieren

Ich hatte das Problem, einen Integerwert im Bereich 00-99 in den entsprechenden Text (in Worten) wandeln zu müssen. Eine Suche ergab u.a. dieses www.delphi-treff.de/...%B6rter%20umwandeln/, das aber erschien mir eine Nummer zu aufwändig. Habe mir folglich eine Funktion gestrickt, die genau die beschriebene Aufgabe löst. Vielleicht kann sie ja noch jemand gebrauchen.

Eine Erweiterung auf den Bereich bis 999 oder größer sollte einfach zu bewerkstelligen sein. Sicher steckt da auch noch ne Menge Optimierungspotenzial drin, um die Performance habe ich mich z.Bsp. überhaupt nicht gekümmert. Auch könnte man vermutlich für den Bereich bis 99 das Array "Dekade" noch einsparen, zu betrachten wären dabei nur die Sonderfälle "zehn" und "dreißig".

ausblenden volle Höhe Delphi-Quelltext
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:
function ConvIntToTextWord(Anzahl : Integer): String;
var
  inWorten, Einer, Endung : String;
  Zehner, intEiner       : Integer;
const
  MaxZWort : Integer = 13;
  und      : String = 'und';
  s        : String = 's';
  en       : String = 'en';
  e        : String = 'e';
  ZWort    : Array[1..13of String =    ('null','ein','zwei','drei','vier','fünf','sech','sieb','acht','neun','zehn','elf','zwölf');
  Dekade   : Array[1..9]  of String =    ('zehn','zwanzig','dreißig','vierzig','fünfzig','sechzig','siebzig','achtzig','neunzig');
begin
  //für größer 99
  inWorten := InttoStr(Anzahl);
  // Im Bereich Null-zwölf
  If Anzahl < MaxZWort then
  begin
    inWorten := ZWort[Anzahl+1];
    case Anzahl of
      1: Insert(e,inWorten,length(inWorten)+1);//e ersetzen durch s, wenn "eins" angezeigt werden soll
      6: Insert(s,inWorten,length(inWorten)+1);
      7: Insert(en,inWorten,length(inWorten)+1);
    end;
  end else
  // Im Bereich dreizehn-neunundneunzig
  begin
    If length(inWorten) = 2 then
    begin
      Zehner := StrtoInt(Copy(inWorten,1,1));
      Einer := Copy(inWorten,2,1);
      //erste/nächste Dekade erreicht?
      If Einer = '0' then
        inWorten := Dekade[Zehner]
      else
      begin
        intEiner := StrtoInt(Einer);
        Einer := ZWort[intEiner+1];
        Endung := Dekade[Zehner];
        If Zehner > 1 then
        begin
          Case intEiner of
            6: inWorten := Einer + s + und + Endung;
            7: inWorten := Einer + en + und + Endung;
          else
            inWorten := Einer + und + Endung;
          end;
        end else
        inWorten := Einer + Endung;
      end;
    end;
  end;
  Result := inWorten;
end;


Wär schön, wenn jemand die Function verwenden kann und auch hier mal berichtet. Gern auch Kritik, wir lernen ja immer noch dazu.
Grüße Delphi10

Edit: Hab den Vorschlag von user profile iconder_hugo umgesetzt. Die Unit(getestet) hänge ich dran.


ConvertTextWorte.pas  (1.86 KB) Download (Rev 0)
 (735x, 735x gesamt)
Beschreibung: Convert-Unit
_________________
Salus populi suprema lex esto


Zuletzt bearbeitet von delphi10 am Mo 16.02.09 20:56, insgesamt 3-mal bearbeitet