Zahlen in Worte (erledigt)

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Zahlen in Worte (erledigt)

Beitrag von peternmb »

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 8)

Ich habe meine uralte Clipper-Funktion (von 1992!) gefunden, die auf Anhieb ohne Änderungen funktioniert :blob8:
UliTs
Der Entwickler von "Deep Thought"
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)

Beitrag von UliTs »

Was spricht dagegen, sie her zu veröffentlichen? 8)
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Zahlen in Worte (erledigt)

Beitrag von peternmb »

UliTs hat geschrieben:Was spricht dagegen, sie her zu veröffentlichen? 8)
gerne, warum nicht - die Funktion ist, soweit ich mich erinnere irgendwie aus Basic abgeleitet, funktionierte aber sofort.
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," ","") 
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Zahlen in Worte (erledigt)

Beitrag von Rudolf »

Hallo, dann mal in sauberem Xbase++ ;-)
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," ","")
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Zahlen in Worte (erledigt)

Beitrag von peternmb »

Hallo Rudolf,

entferne in deinem Code noch das "TO"am Ende dieser Zeile, dann funktioniert auch das auf Anhieb 8) 8)
cTCZWI := cTCZWI+"N" TO
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Zahlen in Worte (erledigt)

Beitrag von Tom »

Und noch aus "achzig" "achtzig" machen, dann sind auch Sprachpuristen zufrieden. :wink:
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Zahlen in Worte (erledigt)

Beitrag von Rudolf »

Hallo, tja, testen war nicht mehr drin ;-)
Grüße
Rudolf
Antworten