Zahlen in Worte (erledigt)
Moderator: Moderatoren
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Zahlen in Worte (erledigt)
Hat vielleicht zufällig schon jemand eine fertige Funktion, die einen Zahlenwert in Worte umsetzt (für Quittungsdruck)?
Sicher kann ich das selber schreiben, aber warum das Rad noch einmal erfinden
Ich habe meine uralte Clipper-Funktion (von 1992!) gefunden, die auf Anhieb ohne Änderungen funktioniert
Sicher kann ich das selber schreiben, aber warum das Rad noch einmal erfinden
Ich habe meine uralte Clipper-Funktion (von 1992!) gefunden, die auf Anhieb ohne Änderungen funktioniert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Zahlen in Worte (erledigt)
Was spricht dagegen, sie her zu veröffentlichen?
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Zahlen in Worte (erledigt)
gerne, warum nicht - die Funktion ist, soweit ich mich erinnere irgendwie aus Basic abgeleitet, funktionierte aber sofort.UliTs hat geschrieben:Was spricht dagegen, sie her zu veröffentlichen?
Irgendwo war noch ein Leerzeichen drin, habe ich aber nicht gesucht sondern bei der Rückgabe herausgenommen.
Code: Alles auswählen
function zahl2word
PARAMETERS Z
STORE INT(Z) TO TNZAHL
STORE 0 TO TNMILLE
STORE .T. TO TLZ0
STORE "ein zwei drei vier fünf sechs sieben acht neun " TO TCALPHA
STORE "zehn zwanzig dreißig vierzig fünfzig sechzig siebzig achzig neunzig " TO TCBETA
STORE "tausend millionen milliarde " TO TCMILLE
DO WHILE TNZAHL # 0
STORE " " TO TCZWI
STORE 0 TO TNVARI, TNEIN, TNZEHN, TNHUND
DO WHILE TNVARI < 3 .AND. TNZAHL # 0
STORE TNZAHL - ( ( INT(TNZAHL/10) )*10 ) TO TNZIFF
STORE (INT(TNZAHL/10)) TO TNZAHL
DO CASE
CASE TNVARI = 0
STORE TNZIFF TO TNEIN
CASE TNVARI = 1
STORE TNZIFF TO TNZEHN
CASE TNVARI = 2
STORE TNZIFF TO TNHUND
ENDCASE
STORE TNVARI + 1 TO TNVARI
ENDDO
IF TNHUND # 0
STORE TRIM ( SUBSTR(TCALPHA,((TNHUND-1)*8+1),8) )+"hundert" TO TCZWI
ENDIF
IF TNZEHN = 1 .AND. (TNEIN=1 .OR. TNEIN=2 .OR. TNEIN=7)
DO CASE
CASE TNEIN=1
STORE TCZWI+"elf" TO TCZWI
CASE TNEIN=2
STORE TCZWI+"zwölf" TO TCZWI
CASE TNEIN=7
STORE TCZWI+"siebzehn" TO TCZWI
ENDCASE
ELSE
IF TNEIN # 0
IF TNZEHN=0 .AND. TNMILLE < 1
IF TNHUND # 0 .OR. TNZAHL # 0
STORE TCZWI+"und" TO TCZWI
ENDIF
ENDIF
STORE TCZWI+TRIM (SUBSTR(TCALPHA,((TNEIN-1)*8+1),8) ) TO TCZWI
IF TNEIN = 1
IF TNZEHN=0
IF TNMILLE < 1
STORE TCZWI+"S" TO TCZWI
ENDIF
IF TNMILLE > 1
STORE TCZWI+"E" TO TCZWI
ENDIF
ENDIF
ENDIF
ENDIF
IF TNZEHN # 0
IF TNZEHN # 1 .AND. TNEIN # 0
STORE TCZWI+"und" TO TCZWI
ENDIF
STORE TCZWI + TRIM (SUBSTR(TCBETA,((TNZEHN-1)*8+1),8) ) TO TCZWI
ENDIF
ENDIF
IF TNMILLE >= 1 .AND. ( TNEIN # 0 .OR. TNZEHN # 0 .OR. TNHUND # 0 )
STORE TCZWI+TRIM (SUBSTR(TCMILLE,((TNMILLE-1)*10+1),10)) TO TCZWI
IF TNMILLE =3 .AND. TNEIN # 1
STORE TCZWI+"N" TO TCZWI
ENDIF
ENDIF
STORE LEN(TCZWI) TO TNLANG
IF TNLANG > 1
IF SUBSTR(TCZWI,1,1)=" "
STORE SUBSTR(TCZWI,2,(TNLANG-1)) TO TCZWI
ENDIF
IF TLZ0
STORE TCZWI TO GCZAHL
ELSE
STORE TCZWI+GCZAHL TO GCZAHL
ENDIF
STORE .F. TO TLZ0
ENDIF
STORE TNMILLE+1 TO TNMILLE
ENDDO
STORE LEN(GCZAHL) TO TNLANG
IF TNLANG > 1
store "*"+upper(substr(gczahl,1,1))+substr(gczahl,2,(tnlang-1))+"*" to gczahl
ENDIF
RETURN strtran(gczahl," ","")
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Zahlen in Worte (erledigt)
Hallo, dann mal in sauberem Xbase++
Grüße
Rudolf
Grüße
Rudolf
Code: Alles auswählen
function zahl2word(z)
******************************************************************
local nTNZAHL := INT(Z)
local nTNMILLE := 0
local lTLZ0 := .t.
local cTCALPHA := "ein zwei drei vier fünf sechs sieben acht neun "
local cTCBETA := "zehn zwanzig dreißig vierzig fünfzig sechzig siebzig achzig neunzig "
local cTCMILLE := "tausend millionen milliarde "
local cTCZWI := " ",nTNVARI := 0,nTNEIN := 0,nTNZEHN := 0, nTNHUND := 0
DO WHILE nTNZAHL # 0
cTCZWI := " ";nTNVARI := 0;nTNEIN := 0;nTNZEHN := 0; nTNHUND := 0
DO WHILE nTNVARI < 3 .AND. nTNZAHL # 0
TNZIFF := nTNZAHL - ( ( INT(nTNZAHL/10) )*10 )
nTNZAHL := (INT(nTNZAHL/10))
DO CASE
CASE nTNVARI = 0
nTNEIN := TNZIFF
CASE nTNVARI = 1
nTNZEHN := TNZIFF
CASE nTNVARI = 2
nTNHUND := TNZIFF
ENDCASE
nTNVARI := nTNVARI + 1
ENDDO
IF nTNHUND # 0
cTCZWI := TRIM(SUBSTR(cTCALPHA,((nTNHUND-1)*8+1),8) )+"hundert"
ENDIF
IF nTNZEHN = 1 .AND. (nTNEIN=1 .OR. nTNEIN=2 .OR. nTNEIN=7)
DO CASE
CASE nTNEIN=1
cTCZWI := cTCZWI+"elf"
CASE nTNEIN=2
cTCZWI := cTCZWI+"zwölf"
CASE nTNEIN=7
cTCZWI := cTCZWI+"siebzehn"
ENDCASE
ELSE
IF nTNEIN # 0
IF nTNZEHN = 0 .AND. nTNMILLE < 1
IF nTNHUND # 0 .OR. nTNZAHL # 0
cTCZWI := cTCZWI + "und"
ENDIF
ENDIF
cTCZWI := cTCZWI+TRIM (SUBSTR(cTCALPHA,((nTNEIN-1)*8+1),8) )
IF nTNEIN = 1
IF nTNZEHN=0
IF nTNMILLE < 1
cTCZWI := cTCZWI + "S"
ENDIF
IF nTNMILLE > 1
cTCZWI := cTCZWI + "E"
ENDIF
ENDIF
ENDIF
ENDIF
IF nTNZEHN # 0
IF nTNZEHN # 1 .AND. nTNEIN # 0
cTCZWI := cTCZWI + "und"
ENDIF
cTCZWI := cTCZWI + TRIM (SUBSTR(cTCBETA,((nTNZEHN-1)*8+1),8) )
ENDIF
ENDIF
IF nTNMILLE >= 1 .AND. ( nTNEIN # 0 .OR. nTNZEHN # 0 .OR. nTNHUND # 0 )
cTCZWI := cTCZWI+TRIM (SUBSTR(cTCMILLE,((nTNMILLE-1)*10+1),10))
IF nTNMILLE =3 .AND. nTNEIN # 1
cTCZWI := cTCZWI+"N" TO
ENDIF
ENDIF
TNLANG := LEN(cTCZWI)
IF TNLANG > 1
IF SUBSTR(cTCZWI,1,1)=" "
cTCZWI := SUBSTR(cTCZWI,2,(TNLANG-1))
ENDIF
IF lTLZ0
GCZAHL := cTCZWI
ELSE
GCZAHL := cTCZWI+GCZAHL
ENDIF
lTLZ0 := .F.
ENDIF
nTNMILLE := nTNMILLE+1
ENDDO
TNLANG := LEN(GCZAHL)
IF TNLANG > 1
gczahl := "*"+upper(substr(gczahl,1,1))+substr(gczahl,2,(tnlang-1))+"*"
ENDIF
RETURN strtran(gczahl," ","")
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Zahlen in Worte (erledigt)
Hallo Rudolf,
entferne in deinem Code noch das "TO"am Ende dieser Zeile, dann funktioniert auch das auf Anhieb
entferne in deinem Code noch das "TO"am Ende dieser Zeile, dann funktioniert auch das auf Anhieb
cTCZWI := cTCZWI+"N" TO
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9371
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Zahlen in Worte (erledigt)
Und noch aus "achzig" "achtzig" machen, dann sind auch Sprachpuristen zufrieden.
Herzlich,
Tom
Tom
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Zahlen in Worte (erledigt)
Hallo, tja, testen war nicht mehr drin
Grüße
Rudolf
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net