Das Notes Forum

Lotus Notes / Domino Sonstiges => Tipps und Tricks => Thema gestartet von: TMC am 27.02.05 - 19:38:25

Titel: [LS-Tipp] Select Case
Beitrag von: TMC am 27.02.05 - 19:38:25
Select Case ist ein sehr mächtiges Werkzeug, aber leider ist es in der Designerhelp nicht komplett dokumentiert.

Select Case nimmt nicht nur einzelne Bedingungen, sondern auch Listen oder etwa Vergleichsoperatoren.

Beispiele für Zahlen


Und es geht noch weiter: auch Strings können abgearbeitet werden.

Beispiele für Strings
Beim 2. Beispiel ist bemerkenswert, dass ein Doppelpunkt am Buchstaben hängt, und trotzdem funktioniert das scheinbar.


Vorteil des ganzen:
Man kann sich viel Code (z.B. if-Verschachtelungen etc. ersparen).


Ich vermute, es gibt noch mehr Möglichkeiten. Bitte immer her damit  ;)
Titel: Re: [LS-Tipp] Select Case
Beitrag von: cococo69 am 27.02.05 - 19:48:34
Hallo Matthias,

das klingt ja hoch interessant! Und wo ist hier der Haken? Irgendwo muss ja was sein, sonst wäre dies doch bestimmt dokumentiert...!?

Gruß Armin
Titel: Re: [LS-Tipp] Select Case
Beitrag von: TMC am 27.02.05 - 19:54:22
Armin, jo, den Haken hab ich auch schon gesucht  ;D

Ich vermute mal Performance, aber konnte subjektiv nix negatives feststellen.

Aber durchaus etwas seltsam, da normalerweise Lotus Notes sehr gut dokumentiert ist, und es nur wenige Ausnahmen gibt, wo das nicht so ist. Auch die ND6-Help ist nicht wirklich mitteilsamer bei Select Case.

Hmm, wäre schon fast was für einen Best Practices - Artikel, wenn wir keine Haken finden  :D
Titel: Re: [LS-Tipp] Select Case
Beitrag von: koehlerbv am 27.02.05 - 19:57:41
Ich kann noch nicht entdecken, was davon undokumentiert ist (ausser dem Doppelpunkt - von solchen Stunts würde ich die Finger lassen).

Und Matthias hat vollkommen wahr: Select Case ist ein mächtiges Werkzeug. Genauso wie Listen  ;D Die haben mir gerade gestern wieder das Leben mächtig erleichtert  ;)

Bernhard

PS: Wegen Haken - ist nicht. Wegen Performance - der Code wird nativ umgesetzt und ausgeführt, ist ergo schneller als andere Konstrukte, die zum Beispiel sowas wie "Case 15..50" ausdrücken.
Titel: Re: [LS-Tipp] Select Case
Beitrag von: TMC am 27.02.05 - 20:06:45
Ich kann noch nicht entdecken, was davon undokumentiert ist (ausser dem Doppelpunkt - von solchen Stunts würde ich die Finger lassen).

Hmm, ja eben die Sache mit dem Doppelpunkt meinte ich, aber generell Strings a....z. Jedenfalls gibt es kein Beispiel in der Help hierzu und auch sonst wird es IMHO nicht explizit erwähnt. Select Case weiß aber, dass nach A ein B kommt, usw.

Ich nehme Select Case übrigens auch her, um If-Abfragen zu vermeiden.

Selbst bei:
Code
If Bedingung = 1 Then
   'Aktion
Elseif Bedingung = 2 Then
   'Aktion 2
End If
nehme ich oft lieber select case, da IMHO übersichtlicher. Und ich baue immer einen "Case Else" ein. Auch wenn dort nix passiert, aber dann kommentiere ich das im Case Else.
Titel: Re: [LS-Tipp] Select Case
Beitrag von: Semeaphoros am 27.02.05 - 20:20:31
Wer den Advanced Lotusscript Test schreiben will, merkt sich mit Vorteil diese Möglichkeiten, die kommen dort als Fragen vor. Und ich hab das auch schon in Lotusphere-Sessions abgehandelt gesehen, da ist man also durchaus bei den Leuten mit diesen Konstrukten.

Wieso soll "a:" to "z:" exotisch sein? Das ist doch äquivalent zu

   "a:" <= x <= "z:"

und wird damit intern genauso abgearbeitet, wie wenn da a to z oder auch Aachen to Zuerich stehen würde, das ist nicht wirklich was besonderes.
Titel: Re: [LS-Tipp] Select Case
Beitrag von: TMC am 27.02.05 - 20:36:37
Ah, danke für die Bestätigung, Jens.

Wobei ich es seltsam finde, dass gerade sowas in einem Test abgefragt wird. Aber das ist ein anderes Thema ("Wie prüfe ich, ob jemand LS kann via Test").
Ich persönlich bin auch gegen alle MultipleChoice - Tests. Einmal gelernt, für immer vergessen.
Vorteil: es kann schwarz/weiss ausgewertet werden und es gibt immer ein klares Ergebnis. Und die Testauswertung ist schnell.
Erinnert mich noch an meine Schulzeit: Mathe-Schulaufgaben gab's meist 1-2 Tage später zurück, Deutsch-Schulaufgaben oft erst nach 1 Woche oder später. Wenn der Deutsch-Lehrer schnell war, wussten wir meist, er hat sich keine Mühe gegeben. Und bei Deutsch-Schulaufgaben (Aufsätze, Erörterungen, etc.) ist auch viel subjektiver Einfluss vom Lehrer dabei. Da können schon mal 2-3 Schulnoten auseinanderliegen zw. 2 Lehrern.
Titel: Re: [LS-Tipp] Select Case
Beitrag von: koehlerbv am 27.02.05 - 20:44:22
Noch ein Nachsatz zu "a:" to "z:": Da braucht man nur die ASCII-Chars zu betrachten (und muss dies auch), um zu wissen, wann dies funktioniert und wann nicht. Insofern ist dies also kein "Stunt", wenn man weiss, was man tut.

Eine gute Sonntagnacht wünscht

Bernhard
Titel: Re: [LS-Tipp] Select Case
Beitrag von: Semeaphoros am 27.02.05 - 20:50:02
Täusche Dich nicht bei der Beurteilung von Schulnoten, alles, was ich bisher zu dem Thema gesehen hab, zeigt, dass die Spanne bei Matheaufgaben ähnlich breit - also bei gleichen Resultaten eine Abweichung von 2 bis 3 Noten zwischen zwei Leherern - ist wie bei Aufsätzen oder so. Auch da spielt viel subjektives hinein, ein ziemlich deutliches Beispiel: Die Mathe-Aufgabe wurde mit dem richtigen Lösungsweg gelöst, am Schluss macht der Schüler einen Flüchtigkeitsfehler und hat ein falsches Resultat. Wie ist das zu bewerten? Falsch, weil das Resultat nicht stimmt? Halbrichtig, weil der Lösungsweg stimmt aber das Resultat falsch? Richtig, weil der Lösungsweg stimmt, der kleine Fehler im Resultat ist nicht wirklich wichtig? Da differieren dann die Meinung der Leute gewaltig und selbst bei ein und demselben Lehrer gibts da auch mal unterschiedliche Resultate, je nach sym- oder anti-pathie ......

Richtig, diese MC-Tests sind nichts besonders schönes, sie sind sehr praktisch, weil einfach und schnell ausgewertet. Lotus hat vor vielen Jahren versucht, Praxis-Tests anstele der MC-Testmethoden zu entwickeln und anzubieten. Der Erfolg? Ernüchternd, um nicht bösere Worte zu gebrauchen. Sowohl die Testzenter wie auch die Prülinge haben diese Art von Tests nicht wirklich akzeptiert und so war Lotus-Education gezwungen, diese wieder einzustampfen. Leider.

Nachtrag zum Advanced-LS-Test: Tatsächlich sind in diesem Test sehr viele, sehr unnötige Fragen (nach der Syntax, die heute mit dem automatischen Ergänzen nicht mehr so wichtig ist zum Bleistift) enthalten, der Test ist aber auch einer der ältesten, die noch existieren, den gabs schon zu R4-Zeiten. Die Leute von der Education-Abteilung wissen das.
Titel: Re: [LS-Tipp] Select Case
Beitrag von: DerAndre am 07.07.05 - 10:22:48
Habe heute eine böse Überraschung mit Select-Case erlebt.

Wollte eine DB mit ca. 117000 Docs durchforsten.

Ausgangssituation:
Es gibt n Doc-Typen mit m Feldern und die Feldnamen sind immer nur in einem Doc vorhanden. In bestimmten Feldern in beliebigen Doc´s muss an beliebiger Stelle ein Wert geändert werden ( versteht man das noch??  O0 )
Also jedes Doc nehmen und reinschauen.....

Ergebnis:
Nach ca. 1100 Docs ist das ganze mit 'Out of Stack Space' abgebrochen.

Habe meinen Code irgenwann bis auf das Select-Statement ausgedünnt und es funktionierte immer noch nicht.
Habe das ganze auf den Klassiker IF-THEN-ELSE umgestellt und jetzt rennt das ganze.
Wo das Problem jetzt tatsächlich herkam konnte ich leider nicht ermitteln.

Gruss

André
Titel: Re: [LS-Tipp] Select Case
Beitrag von: koehlerbv am 07.07.05 - 11:01:12
Das kann aber nicht am SELECT CASE liegen, dass sieht mehr eher nach einer versehentlichen Rekursion aus. Ich hatte gerade vor zwei Wochen einen sehr ähnlichen Fall, selbst die Dokumentzahl ist fast identisch. Und diese Routine läuft jede Nacht und völlig ohne Probleme.

Hast Du den fraglichen Code noch ? Und hat Dir ein ErrorHandler mitgeteilt, an welcher Stelle dem Stack die Luft weggeblieben ist ?

Bernhard
Titel: Re: [LS-Tipp] Select Case
Beitrag von: DerAndre am 07.07.05 - 14:15:57
Hm, leider nicht mehr.
Müsste ich bei Gelegenheit mal Rekonstruieren.

Aber der Fehler zeigte direkt auf eine Case Anweisung.

André

Titel: Re: [LS-Tipp] Select Case
Beitrag von: Semeaphoros am 07.07.05 - 19:02:03
Da verwendet er den Stack für Zwischenresultate. Entweder ist das eine Recursion auf die eigene Routine, oder dann werden irgendwelche Objekte nicht dereferenziert.
Titel: Re: [LS-Tipp] Select Case
Beitrag von: DerAndre am 07.07.05 - 19:28:36
Das habe ich auch vermutet. Bei Gelegenheit werde ich mal einen Agenten mit leeren Case-Anweisen aufsetzen und schauen was passiert.
Titel: Re: [LS-Tipp] Select Case
Beitrag von: wflamme am 29.07.05 - 01:32:21
Ohne das jetzt testen zu wollen tippe ich, daß es bei Strings gleicher Länge funktioniert während Stringvergleiche ungleicher Länge über kurz oder lang zum Stack-Überlauf führen.

(Die Max-Länge der Strings ist auch noch eine Sache, auf die ich mein Hemd nicht verwetten würde)