coalesce() [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
coalesce() [ERLEDIGT]
Hi,
beim Suchen in der Anleitung, bin ich auf die Funktion coalesce() gestossen. Neugierig wie ich bin, habe ich mal etwas gelesen, aber nichts wirklich kapiert. Kann mir jemand dazu etwas sagen?
beim Suchen in der Anleitung, bin ich auf die Funktion coalesce() gestossen. Neugierig wie ich bin, habe ich mal etwas gelesen, aber nichts wirklich kapiert. Kann mir jemand dazu etwas sagen?
Zuletzt geändert von Manfred am So, 08. Aug 2010 11:10, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: coalesce()
Coalesce() liefert aus einer Reihe von Werten den ersten gültigen zurück. Statt mit z.B.:
für drei Gehaltsvarianten (Monat, Jahr, Stunde) in einer Tabelle anzeigen zu lassen, was der Mitarbeiter monatlich verdient, würde das mit Coalesce() so gehen:
Ob das mit numerischen Werten so auch geht, weiß ich nicht, aber das soll wohl das Prinzip sein. Ich nutze die Funktion (bisher) nicht.
Code: Alles auswählen
IF(!Empty(db->MonatsGehalt),db->MonatsGehalt,IF(!Empty(db->JahresGehalt),db->JahresGehalt/12,db->StundenGehalt*8*28))
Code: Alles auswählen
Coalesce(db->MonatsGehalt,db->JahresGehalt/12,db->StundenGehalt*8*28)
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: coalesce()
ah,
Im Prinzip simuliert die Funktion intern die If Abfragen. Theoretisch hätte man auch eine eigene Funktion schreiben können. Aber wenn dem so ist, warum wird dann sowas "einfaches" extra als Funktion angeboten oder sieht es nur so einfach aus auf den ersten Blick?
Im Prinzip simuliert die Funktion intern die If Abfragen. Theoretisch hätte man auch eine eigene Funktion schreiben können. Aber wenn dem so ist, warum wird dann sowas "einfaches" extra als Funktion angeboten oder sieht es nur so einfach aus auf den ersten Blick?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: coalesce()
Hallo, Manfred.
Viele Funktionen, die es in Xbase oder in 3rd-Party-Tools gibt, könnte man auch selbst schreiben.
Das Beispiel würde - ich hab's gerade getestet - aber wirklich nur mit leeren (numerischen) Feldern funktionieren. 0 (Null) ist ein "richtiger" Wert. Ein leerer Datensatz bei DBFNTX liefert aber für numerische Felder immer Null zurück, so dass Coalesce() auf jeden Fall das erste numerische Feld in der Auflistung "feuern" lassen würde.
Viele Funktionen, die es in Xbase oder in 3rd-Party-Tools gibt, könnte man auch selbst schreiben.
Das Beispiel würde - ich hab's gerade getestet - aber wirklich nur mit leeren (numerischen) Feldern funktionieren. 0 (Null) ist ein "richtiger" Wert. Ein leerer Datensatz bei DBFNTX liefert aber für numerische Felder immer Null zurück, so dass Coalesce() auf jeden Fall das erste numerische Feld in der Auflistung "feuern" lassen würde.
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: coalesce()
Hi Manfred,
nur weil etwas "einfach zu verstehen" ist oder "einfach selbst zu schreiben", kann es doch
mühsam sein es jedesmal schreiben zu müssen, somit ist das doch eine schöne Funktion
Nützlich für CodeBlocks() und vor allem, neuerdings können ja Felder auch NULL oder NIL liefern,
wenn du jetzt also immer eine IIF Verschachtelung schreiben willst ... zudem ist die sehr unübersichtlich
wenn mehr als 2 Verschachtelungen nötig sind.
Diese Funktion kann also einfach das Feld als ersten Begriff zurückgeben und einen
DEFAULT Wert an 2. Stelle
nur weil etwas "einfach zu verstehen" ist oder "einfach selbst zu schreiben", kann es doch
mühsam sein es jedesmal schreiben zu müssen, somit ist das doch eine schöne Funktion
Nützlich für CodeBlocks() und vor allem, neuerdings können ja Felder auch NULL oder NIL liefern,
wenn du jetzt also immer eine IIF Verschachtelung schreiben willst ... zudem ist die sehr unübersichtlich
wenn mehr als 2 Verschachtelungen nötig sind.
Diese Funktion kann also einfach das Feld als ersten Begriff zurückgeben und einen
DEFAULT Wert an 2. Stelle
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: coalesce()
OK,
alles klar. Mich versteht wieder keiner......
Ich wollte auch nur wissen, ob die Sache so einfach zu sehen ist, oder ob da etwas richtig deftiges hintersteckt, was ich auf Anhieb nicht sehe, oder gesehen habe. Sicherlich sind fertige Routinen, wenn sie hochoptimiert geschrieben sind, besser. Aber das war ja eigentlich nur meine Frage. Wir programmieren unsere Funktionen in Xbase++ und die Jungs vielleicht in einer schnelleren Sprache, die dann auch eine höhere Ausführung bringt (bringen könnte). Vielleicht auch nicht.
alles klar. Mich versteht wieder keiner......
Ich wollte auch nur wissen, ob die Sache so einfach zu sehen ist, oder ob da etwas richtig deftiges hintersteckt, was ich auf Anhieb nicht sehe, oder gesehen habe. Sicherlich sind fertige Routinen, wenn sie hochoptimiert geschrieben sind, besser. Aber das war ja eigentlich nur meine Frage. Wir programmieren unsere Funktionen in Xbase++ und die Jungs vielleicht in einer schnelleren Sprache, die dann auch eine höhere Ausführung bringt (bringen könnte). Vielleicht auch nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: coalesce()
so ist esManfred hat geschrieben:Wir programmieren unsere Funktionen in Xbase++ und die Jungs vielleicht in einer schnelleren Sprache, die dann auch eine höhere Ausführung bringt (bringen könnte).
ähhhmmmm, hast du mal ASORT() mit QUICKSORT in Xbase++ geschrieben vergliechen ?Manfred hat geschrieben:OK,
Vielleicht auch nicht.
Oder AScan() / StrTran() mit eigenen Funktionen ?
Da liegen Welten dazwischen !
Intern können die nämlich hoch optimierte C++ Routinen mit LONG Integern nutzen,
eventuell sogar auf Prozessorregister optimieren ... wir können das nicht
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: coalesce()
Hallo, Manfred.
Ich verstehe Dich.
Tatsächlich weiß man das nicht. Es gibt einige Xbase++-Funktionen, die in Xbase++ geschrieben sind, und andere wieder nicht. Dann hängt es zusätzlich davon ab, wie sie designed sind. Man kann alles auf langsame und auf optimale Art machen. Fragt sich, ob bei Funktionen wie Coalesce() oder Dingen wie Min() und Max() - die man ja auch simpel selbst bauen kann - tatsächlich ein Zeitgewinn drin oder draußen ist, wenn man es oder nicht selbst macht.
Ich verstehe Dich.
Tatsächlich weiß man das nicht. Es gibt einige Xbase++-Funktionen, die in Xbase++ geschrieben sind, und andere wieder nicht. Dann hängt es zusätzlich davon ab, wie sie designed sind. Man kann alles auf langsame und auf optimale Art machen. Fragt sich, ob bei Funktionen wie Coalesce() oder Dingen wie Min() und Max() - die man ja auch simpel selbst bauen kann - tatsächlich ein Zeitgewinn drin oder draußen ist, wenn man es oder nicht selbst macht.
Herzlich,
Tom
Tom