AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
22.05.12 - 11:37:50
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino Sonstiges
| |-+  Projekt Bereich (Moderator: _Arne_)
| | |-+  Welche Schleife wann in Script
« vorheriges nächstes »
Seiten: 1 2 3 [4] Nach unten Drucken
Autor Thema: Welche Schleife wann in Script  (Gelesen 11231 mal)
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #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
Gespeichert

Matthias

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

TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #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
Gespeichert

Matthias

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

TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #62 am: 08.11.03 - 17:35:18 »


@Rob, leider funktionieren diese Links nicht (mehr), hast Du da vielleicht eine aktuelle Quelle?

Danke,
TMC
Gespeichert

Matthias

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

TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #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
Gespeichert

Matthias

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

koehlerbv
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 19044



« Antworten #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
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #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)
Gespeichert

Matthias

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

koehlerbv
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 19044



« Antworten #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
Gespeichert
koehlerbv
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 19044



« Antworten #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
Gespeichert
Semeaphoros
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8152


ho semeaphoros - agr.: der Notesträger


WWW
« Antworten #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.
Gespeichert

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
koehlerbv
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 19044



« Antworten #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
Gespeichert
Rob Green
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2651



WWW
« Antworten #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.
Gespeichert

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
Semeaphoros
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8152


ho semeaphoros - agr.: der Notesträger


WWW
« Antworten #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 » Gespeichert

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
Semeaphoros
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8152


ho semeaphoros - agr.: der Notesträger


WWW
« Antworten #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 ....  Grin

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.
Gespeichert

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
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #73 am: 09.11.03 - 14:27:24 »

OK, dank Eurer Hilfe wäre nun dieses Projekt vorerst abgeschlossen  Smiley

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
Gespeichert

Matthias

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

TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #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
Gespeichert

Matthias

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

Glombi
Global Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8401


WWW
« Antworten #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
Gespeichert

IBM Certified Application Developer - Lotus Notes and Domino 8
Glombitza Informations-Systeme ist nun Teamstudio Bronze Partner!
Ihr interessiert Euch für Teamstudio Produkte, Spam-Lösungen, Antiviren-Lösungen oder Lotus Notes Lizenzen? Dann einfach Mail oder PM an mich!
Rob Green
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2651



WWW
« Antworten #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
Gespeichert

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
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #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
Gespeichert

Matthias

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

Seiten: 1 2 3 [4] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: Tinte / Toner günstig