Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Integer in Worte konvertieren
spacer
Autor Nachricht
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic star

Beiträge: 391
Dabei seit: 10.09.2007
Wohnort: Salzgitter

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Mi 12.11.08 22:24  Antworten mit Zitat Beitrag melden
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 markieren
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..13] of 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)
 (199x, 199x gesamt)
Beschreibung: Convert-Unit
_________________
Salus populi suprema lex esto


Zuletzt bearbeitet von delphi10 am Mo 16.02.09 20:56, insgesamt 3-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home