Autor Thema: Welche Schleife wann in Script  (Gelesen 56998 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #60 am: 08.11.03 - 16:08:54 »
Danke Glombi und Jens für den neuen Input!

Das ganze ist jetzt in der aktuellen Beta 5 eingearbeitet.

(Attachment siehe 1.Posting).

Weiterer Input und Anregungen sind willkommen.

Jens schicke ich das jetzt noch als Word, weil er auch noch Ergänzungen machen möchte.

Schön langsam wird's aber!
Endgültige Gliederung der Doku und Index erstelle ich noch, nachdem die Inhalte alle soweit fertig sind.

Grüße,
TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #61 am: 08.11.03 - 16:38:27 »
Noch ein Hinweis zu den offenen Punkten:

1) Do...Loop – Schleife (Kap. 7.1)
--> offen wer das macht (bzw. Jens)

2) Performance (Kap. 10)
--> mein Part (analysiere gerade Rob's Links)

3) Links (Kap. 11)
--> Vorschläge willkommen, Rob hat ja auch schon einiges gepostet


TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #63 am: 08.11.03 - 17:53:24 »
So, nun habe ich auch noch den Part "Performance" und "Links" ergänzt.
(Attachment Beta 6: siehe wie immer 1.Posting).

Nachdem ich bereits 2 Artikel von Rob's Links sinngemäß ins deutsche übersetzt und in die Doku integriert hatte, ist mir gekommen:
"So ein Schmarrn".

Ich behaupte mal, fast jeder, der sich mit Programmierung auseinandersetzt, versteht zumindest in Grundsätzen die geschriebene englische Sprache.
Daher habe ich nun darauf verzichtet, hier Übersetzungsarbeit zu leisten.
Ich habe daher nur die Links reingesetzt, ein Fazit in deutsch drin, und Original-Zusammenfassungen.
Meines Erachtens muss das so reichen. Einzigste Befürchtung ist, dass die Weblinks irgendwann mal tot sind....

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Welche Schleife wann in Script
« Antwort #64 am: 08.11.03 - 19:26:08 »
Noch eine Bemerkung zum "Durchwandern" von Collections und GetNthDocument (entrynumber):
- Schreibfehler (GetNthDocument = 1 Wort)
- Sollte aus Performancegründen in der Tat nicht verwendet werden, weil der (neue) Pointer jedes Mal vom Pointer auf den ersten Eintrag aus (!) neu gebildet werden muss. Bei wenigen Elementen stellt dies kein (wahrnehmbares) Problem dar, der Rechenaufwand steigt jedoch exponentiell (!) an und kann nach einigen Tausenden Einträgen schon in den Bereich 1 Sekunde/Pointerbildung gelangen.
- Tritt sowohl in Collections als auch in Views auf.
- Benötigt man eine Nummerierung der gerade bearbeiteten Elemente, sollte parallel zur Instantiierung ein separater Zähler mitgeführt werden.

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #65 am: 08.11.03 - 19:31:11 »
@Bernhard:
Danke für Deinen Input!

Sagst Du mir bitte auch noch den Bezug (Kapitel-Nr.) der Doku?

Merci,
TMC
(verliere sonst die Übersicht)
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Welche Schleife wann in Script
« Antwort #66 am: 08.11.03 - 19:46:19 »
Zur Do ... Loop-Schleife:

Eine reine Do ... Loop-Schleife ist die primitiveste Form der Do ... Loop-Konstrukte, die weder kopf- noch fussgesteuert ist, sondern de-facto eine Endlosschleife bedeutet. Ihr Verlassen muß explizit mit
Exit Loop oder
Goto (Sprungmarke ausserhalb des Do ... Loop-Konstrukts)
erzwungen werden.

Die reine Do ... Loop-Schleife eignet sich für Situationen, in denen nicht eine bekannte bzw. ermittelbare Anzahl von Elementen abgearbeitet werden soll, sondern auf bestimmtes Ereignis gewartet wird.

Beispiel:
Const EXIT_INPUT = "EXIT"
Dim szInput as String

Do
   szInput = InputBox$ ("Bitte geben Sie das Suchwort ein. Geben Sie Exit ein, um die Suche abzubrechen.", "Suche formulieren")
   If Ucase (szInput) = EXIT_INPUT then
      Exit Do
   End If

   If szInput <> "" then
      Call SearchResults (szInput)    'Suche durchführen ...
   End If

Loop

HTH,
Bernhard

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Welche Schleife wann in Script
« Antwort #67 am: 08.11.03 - 19:49:54 »
Sorry, Du hast natürlich recht. Hier die Kapitelnummern zu meinen letzten beiden Postings:
- GetNthDocument: 3.1.4 (aber das sollte vielleicht herausgelöst werden und in ein eigenes Kapitel, da es ja auch andere Schleifentypen betrifft)

- Reine Do ... Loop-Schleife: 7.1

Ciao,
Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #68 am: 08.11.03 - 20:15:01 »
Bernhard: Das Verlassen einer Schleife mit Goto ist eigentlich nach ANSI-Standard verboten. Der Grund ist einfach: der Compiler erkennt das Verlassen der Scheife nicht und räumt den Stack erst beim Verlassen des nächst-äusseren Blocks auf. Wenn das ein Loop im Loop ist, kann das durchaus mal zu Memory-Problemen (bzw. Stack-Size) führen.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Welche Schleife wann in Script
« Antwort #69 am: 08.11.03 - 20:36:31 »
Vollkommen richtig, Jens. Man *kann* eine Schlaufe mit Goto verlassen, *sollte* aber nicht - genau aus den von Dir genannten Gründen: Der Loop-Stack bleibt erhalten, bis das komplette Objekt "zerstört" wird. Häufig macht das nix - kurz nach der Goto-Sprungmarke ist ja eh' "Ende Gelände" für das Modul, aber irgendwann passiert es dann doch: Goto 'raus aus der Schleife ist einfach eine "Sauerei".

Etwas anderes wäre das Goto innerhalb eine "slynge" (das war dänisch ;-)
Und hier wäre ein eigenes Kapitel "Wie beherrscht man innerhalb einer Schleife Ordnung und Sauberkeit im Schlachthaus?" durchaus interessant.
Goto führt zu unstrukturierter, unübersichtlicher Programmierung. Richtig. Aber innerhalb einer Schleife kann es passieren, daß n (mit n = wird sehr gross) Bedingungen zu beachten sind. Wenn das mit Select Case zu erschlagen ist: Wunderbar. Wenn nicht, dann schachtelt man sich mit Ifs dumm und dämlich. Da kann es m.E. durchaus zur Les- und Pflegbarkeit des Codes beitragen, wenn das (compilerfreundliche !) Goto-Statement eingesetzt wird - ordentlichst dokumentiert (vor der Schleife ! In der Schleife nochmal !). Und in der Regel führt dieses Goto dann zum Fuss der Schleife. Hier mal ein stark vereinfachtes Beispiel mit Verzicht auf x-fach verschachtelte Conditions:

Set viewDocToChange = dbCurrent.GetView ("...")
Set docToChange = viewToChange.GetFirstDocument
While Not (docToChange is Nothing)
   If ... then
      'code
   else
      Goto GetNextDocument

GetNextDocument:
   Set docToChange = viewToChange.GetNextDocument (docToChange)
Wend

Bernhard

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Welche Schleife wann in Script
« Antwort #70 am: 08.11.03 - 21:34:04 »
hi TMC, Ferdy hat leider mit dem Bloggen aufgehört, kurz nachdem er bei einem Großkotzern in Holland angefangen hatte. Wohl Stress ... hehehe .. auf jeden Fall war sein Blog lange Zeit noch lesbar, nun scheint er ihn versenkt zu haben. Helfen kann ich auch nicht mehr, sorry. Aber merke für die Zukunft, alte Gamerregel, immer richtig: save early, save often ... und mit Notes ist es noch einfacher, Webseiten zu saven, sobald man was Wichtiges hat.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #71 am: 08.11.03 - 21:40:25 »
Bernhard: Sehr gute zusätzliche Bemerkungen und - auch wenn ich es praktisch nie verwende - sehe das mit dem Goto innerhalb der Schleife auch so. Goto wird verdammt, dabei ist ein exit loop ja  nix anderes als auch ein Goto hinter das Ende des loops, dürfte also eigentlich auch nicht sein, wenn man gotos ganz verbietet, wird aber auffallend ganz besonders von denjenigen, die goto vehement verbieten, genauso vehement als Allheilmittel gepriesen ----  irgendwie merkwürdig, scheint mir.

Weitere Möglichkeit, das Verwenden von Subroutinen innerhalb einer Schleife, um das Schlachthaus etwas besser in Ordnung zu behalten, auch wenn dadurch natürlich ein Performance-Penalty zu bezahlen ist. Völlig richtig, dass das einen eigenen Abschnitt abgeben könnte.
« Letzte Änderung: 09.11.03 - 12:22:27 von Semeaphoros »
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #72 am: 09.11.03 - 12:27:11 »
Habe ins Document von TMC jetzt noch den Abschnitt 7.1 aus Bernhards Vorgabe (unter Weglassung des Goto aus der Schlaife raus) ergänzt und auch sonst noch ein paar Feinheiten ins Dokument eingebaut und an TMC zur Redaktion zurückgeschickt. Die Betrachtungen zur übersichtlichen Strukturierung innerhalb des Loops, was Bernhard hier auch angedeutet hat, ist (noch) nicht drin, wir brauchen ja schliesslich Stoff für Version 1.1 ....  ;D

Ich möchte TMC für die geleistete Arbeit von Herzen danken, er hat aus den vielen Fetzen, die hier zusammengetragen wurden, wirlich einen gut lesbaren und gut strukturierten Text erstellt.

Und ich denke tatsächlich darüber nach, ob man das insbesondere anhand der Performance - Betrachtungen zu einem Vortrag verarbeiten könnte. Keep tuned, ich informiere, sobald sich was auf der Vortragsseite tut.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #73 am: 09.11.03 - 14:27:24 »
OK, dank Eurer Hilfe wäre nun dieses Projekt vorerst abgeschlossen  :)

Endversion 1.0 ist im 1.Posting downloadbar.

Ich danke allen Autoren und Helfern!

Anregungen, Verbesserungsvorschläge und neuer Input sind natürlich gerne gesehen.

Viele Grüße,
TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #74 am: 10.11.03 - 20:17:19 »
OK nun gibts noch Version 1.01 im ersten Posting.
Hat sich aber fast nix geändert.
Habe nur die Kontatdaten von Don Pasquale hinzugefügt und Änderungshistorie eingefügt.

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:Welche Schleife wann in Script
« Antwort #75 am: 12.11.03 - 10:56:04 »
Ich weiß nicht, ob es bereits erwähnt habe, daher möchte ich noch auf etwas wichtiges bzgl. der For-Next-Schleife hinweisen:
Die Laufvariable sollte nicht innerhalb der Schleife geändert werden. LotusScript inkrementiert die Laufvariable selbst:

Bsp:
Dim i as Integer
For i = 0 to 6
 Print i
Next

erzeugt 0,1,2,3,4,5,6

Dim i as Integer
For i = 0 to 6
 Print i
 i = i + 1    'DAS SOLLTE MAN NICHT MACHEN !!!
Next

erzeugt 0,2,4,6 !!!

Will man nicht in 1-er Schritte iterieren, kann man dieses mittels Step definieren.

Bsp.
Dim i as Integer
For i = 0 to 6 Step 3

Print i
Next

erzeugt 0.3.6

Andreas

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Welche Schleife wann in Script
« Antwort #76 am: 12.11.03 - 11:16:53 »
weitere Hinweise:

- ich würde separat die Reichweite von Variablen in Schleifen kurz in einem kleinen Unterkapitel ansprechen. Ebenso - auch wenn es nicht unbedingt nur in Schleifen ein Problem ist - zusätzlich globale Variablen ansprechen, die auch außerhalb des Schleifenkörpers ihre Gültigkeit nicht verlieren, aber bei einem erneuten Lauf entsprechend neu gesetzt werden müssen, da sie sonst mit dem alten Wert starten, was zu Fehlern führen kann.
- ein beliebtes Spiel ist das Befüllen von Listenwerten in Schleifen. Hier kommt es meiner Erfahrung nach häufig zu Problemen. Beispiel: es gilt im Rahmen einer Schleife mehrer Docs abzuchecken und Ergebnisse festzuhalten. Ergebnis soll sein zB sowas:
"Test A ist ok"
"Test B ist ok"
"Test C ist nicht ok"
Genau da kommen viele ins Schwimmen: der User soll das Ergebnis wie oben visualisiert bekommen. Also mit Zeiulenumbruch. Aber halt ... Problem ... erzeuge ich die Variable so

schleifenkörper
...
Inhalt="Test ist" & Cstr(CheckausDoc) & Chr(10) & Inhalt // oder wars Chr(0)? Bin mir jetzt nicht sicher
....

bekomme ich dummerweise
"Test C ist nicht ok"
"Test B ist ok"
"Test A ist ok"
""

Nehme ich
schleifenkörper
...
Inhalt=Inhalt & Chr(10) & "Test ist" & Cstr(CheckausDoc) // oder wars Chr(0)? Bin mir jetzt nicht sicher
....

bekomme ich
""
"Test A ist ok"
"Test B ist ok"
"Test C ist nicht ok"

Was tun?
check auf ersten Lauf, und ab zweiten Durchlauf Variable anpassen
...
if i<1 then
inhalt = "test ist " & Cstr(CheckausDoc)
else
inhalt = inhalt & chr(0) & "test ist" & Cstr(CheckausDoc)
end if

Hoffe, das war einigermassen verständlich
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #77 am: 26.01.04 - 20:34:05 »
Die Dokumentation "Schleifen in Lotus Script" befindet sich ab sofort unter Best Practices als PDF zum Download:
Best Practices - Schleifen in Lotus Script

Es können aber gerne weiter hier im Thread weitere Anregungen, Verbesserungsvorschläge etc. gepostet werden.

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz