Autor Thema: Array auf bestimmten Wert durchsuchen  (Gelesen 5300 mal)

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Array auf bestimmten Wert durchsuchen
« am: 20.03.12 - 15:29:30 »
Hallo,

ich such gerade nach einer Möglichkeit ein Array nach einem bestimmten Wert zu durchsuchen und sobald ich den Wert hab, kann er aufhören mit suchen.
Also in etwa so:

Forall x In Array
   If x > Prüfsumme Then
    Tu das
   Else
     prüfe nächstes Element bis alle durchsucht sind oder die Bedingung Inhalt > Prüfsumme zutrifft
   End if
End forAll     

Ich hab jetzt lang überlegt, wie man solch eine Schleife am sinnvollsten zusammenbaut und würde mich über Tipps freuen  :)

Chris
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Array auf bestimmten Wert durchsuchen
« Antwort #1 am: 20.03.12 - 15:37:41 »
mit

While not
...
wend ?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #2 am: 20.03.12 - 15:41:10 »
While Not sollte langsamer sein.

Das "Tu das" sollte durch die "notwendigen Handlungen" und ein Exit For ersetzt werden.

Bernhard

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Array auf bestimmten Wert durchsuchen
« Antwort #3 am: 20.03.12 - 15:44:14 »
Zitat
...ich such gerade nach einer Möglichkeit ein Array nach einem bestimmten Wert zu durchsuchen
Da hab ich sofort an ArrayGetIndex gedacht.... das passt aber auf dein Beispiel nicht da hier ein > Vergleich drin ist.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #4 am: 20.03.12 - 15:47:16 »
While Not sollte langsamer sein.

Das "Tu das" sollte durch die "notwendigen Handlungen" und ein Exit For ersetzt werden.

Bernhard

Exit Forall

ach, was bin ich heute wieder pingelig ...

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #5 am: 20.03.12 - 15:52:42 »
Du hast aber wahr, Peter. Danke für die Korrektur.

Bernhard

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Array auf bestimmten Wert durchsuchen
« Antwort #6 am: 20.03.12 - 16:12:14 »
Danke für die Antworten!
Ihr meint also so?

Forall x In Array
   If x > Prüfsumme Then
       Tu das
       Exit Forall
   End if
End ForAll     

Hab ich das jetzt richtig begriffen?  :)
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Array auf bestimmten Wert durchsuchen
« Antwort #7 am: 20.03.12 - 16:29:06 »
Merci. Scheint zu klappen.  :)
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #8 am: 20.03.12 - 16:32:14 »
Was heisst "scheint"?? Du bist hier im Bereich der Programmierung, und da gibt es nur "ja" oder "nein", 1 oder 0, funktioniert oder funktioniert nicht.

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #9 am: 20.03.12 - 17:06:31 »
Nun ja, "scheint" heißt, dass es in den getesteten Fällen funktioniert, was aber nicht bedeutet, dass es immer funktioniert, weil beim Testen nicht alle Eventualitäten bedacht werden können.

Für mich interpretiere ich 0 und 1 in der Programmierung so:

0 - macht das, was ich gesagt habe
1 - macht das, was ich gemeint habe

Wobei 0 und 1 auch zusammenfallen können, aber nicht müssen.

Weiterhin gibt es noch die Zustände

2 - es versteht mich nicht
3 - ich verstehe es nicht

Also, binär ist m.E. etwas zu wenig :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #10 am: 20.03.12 - 17:13:00 »
 ;D ;D ;D

Sehr gut! Wir werden philosophisch  :)

Meine Sicht: 0 stimmt immer. Dem kann aber 1 entgegen stehen, weil für die Programmierer der Middleware auch 0 gilt, aber 1 nicht zutrifft.

2 und 3 liegenauf einer anderen Ebene. 3 hängt meist damit zusammen, dass 0 gilt (logisch), aber 1 nicht, weil durch die Komplexität ein Nebeneffekt auftritt, der nicht bedacht wurde. Damit kommen wir zur nächsten Ebene:

4 - es passiert immer (übel, wenn dann länger Zustand 3 gilt)
5 - es passiert sporadisch (es gilt immer noch 0, aber auch 4^übel.

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #11 am: 20.03.12 - 17:31:06 »
Ich sehe schon, wir verstehen uns :)

Tiefergehendes lässt sich bestimmt demnächst bei entsprechender Flüssigkeitsaufnahme erörtern ...

Bis Montag in Gelsenkirchen (oder Sonntag Abend? Wird bei mir aber sehr spät), bin ab Morgen unterwegs.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #12 am: 20.03.12 - 17:51:13 »
Ich sehe schon, wir verstehen uns :)

Bezweifelst Du das, Peter?

Bis Montag in Gelsenkirchen (oder Sonntag Abend? Wird bei mir aber sehr spät), bin ab Morgen unterwegs.

Okay, dann wird es bei mir eben auch spät. Ich bin am Montag eh aktiv gesehen vortragsfrei.

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #13 am: 20.03.12 - 18:00:14 »
Ich sehe schon, wir verstehen uns :)

Bezweifelst Du das, Peter?

NEIN !!!

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Array auf bestimmten Wert durchsuchen
« Antwort #14 am: 20.03.12 - 20:52:15 »
Also, um nochmal zu meinem Anliegen zurück zu kommen ;D
Peter hat Recht. Bei den mir gegebenen Gegebenheiten hat es anscheinend funktioniert. Allerdings war das Ergebnis nicht das, dass ich gerne gehabt hätte. Nun muss ich morgen nochmal genau prüfen, wie es zu dem Ergebnis kam und wie ich die Problembehebung weiter ausbreiten kwann. Aber allein von dem Sinn, also der Funktion hinter den zwei ineinander gepackten schleifen bin ich überzeugt. Nur muss das bei einem Anfänger wie mir nichts heißen ;)

Deswegen: Es scheint zu funktionieren. Die Funktion sah aus wie eine 0  - das Ergebnis aber war eine Mischung aus 0 und 1.
Und nun hab ichs sicher geschafft, dass ihr euch wieder einig seit und zwar darüber, dass ihr mich nicht versteht. ;D
Ich werd mich einfach morgen nochmal melden wenn ich wieder am Rechner bin und das Ergebnis genauer analysiert habe ;)
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Array auf bestimmten Wert durchsuchen
« Antwort #15 am: 20.03.12 - 20:56:33 »
Hier gilt wieder 0: Es ist richtig, wir verstehen Dich nicht. Aber ganz einfach nur deswegen, weil Du von Deinem Problem kein Wort schreibst.
Nur Mut, Chris!

Bernhard

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Array auf bestimmten Wert durchsuchen
« Antwort #16 am: 26.03.12 - 11:45:05 »
So, nach langem hin und her hab ich nun den Mut mich dazu nochmal zu äußern.  ;D
Problematik war die, dass es bei ein paar Anwendern das Problem gibt, das Jahrestage am falschen Tag angezeigt werden. Ursache ist bekannt (BES) und wurde hier im Forum auch schon mal diskutiert.
Nur gab es scheinbar keine Lösung oder eben nur die, die Kalendereinträge zu löschen und neu anzulegen.
Ich hab mich jetzt mal hingesetzt und hab die Problematik studiert, wenn man das so nennen kann 8)

Die folgenden Felder des falsch dargestellten Kalendereintrages vom Typ Date/Time waren falsch und zeigten falsche Werte an
EndDate
EndTime
StartDate
StartTime

Die folgenden Felder des falsch dargestellten Kalendereintrages vom Typ Time / Date List or Range waren nicht richtig belegt.
CalendarDateTime
StartDateTime
EndDateTime

Das richtige Datum war im folgenden Feld zu finden
RepeatInstanceDates

Das Feld StartDateTime ist ausschlaggebend an welchen Tag der Jahrestag angezeigt wird.

Deswegen hab ich einen Agenten geschrieben, der den ersten Datumswert des Feldes RepeatInstanceDates mit dem ersten Datumswert des Feldes StartDateTime abgleicht.
Wenn die "Datums" nicht identisch sind, dann liegt das Problem, eines falsch dargestellten Kalendereintrages vor.
Dann sind die oben genannten Felder mit falschen/kaputten Inhalten befüllt und der Agent berichtigt das.
Als kleines Feature geht der Agent dann auch noch her und verlängert die wiederholung der Jahrestage auf 50 Jahre.

Hier ist der Agent. Viellecht fallen euch noch Fehler auf oder vielleicht könnt ihr den Agenten auch für euch nutzen.
Bei uns funktioniert der Agent aufjedenfall  :)
Danke für eure Hilfe!

Chris


Code
%REM
	Agent Jahrestage reparieren
	Created Mar 1, 2012 by Chris
	Description: Comments for Agent
%END REM
Option Public
Dim session As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Dim i As Double
Dim Betreff As String
Dim Datum As Variant
Dim Start As Variant
Dim Ende As Variant
Dim Startdatum As NotesDateTime
Dim Enddatum As NotesDateTime
Dim ArrayNr As Integer
Dim StartDateTimeA(49) As Variant
Dim EndDateTimeA(49) As  Variant
Dim BedingungDatum As String
Dim Checkdatum As String

Sub Initialize	
	On Error GoTo Finish
	Set session = New NotesSession
	Set db = session.CurrentDatabase
	Set view = db.Getview("($MeetingsOnMyCalendar)")
	Set doc = view.Getfirstdocument()
	i = 0
	Set ende = session.CreateDateTime("20:00:00")
	Set start = Session.CreateDateTime("04:00:00")
	BedingungDatum = "26.03.2011"
	While Not doc Is Nothing
		If doc.form(0) = "Appointment" Then       			' Wenn die Maske des Dokuments "Appointment" ist
			If doc.Appointmenttype(0) = "1" Then			' Wenn der Typ des "Appointments" = 1  - sprich "Jahrestag" ist
				Betreff = doc.Subject(0)
				If (InStr(Betreff,"(Deutschland)")) =0 Then			' Wenn der Titel des Dokuments nicht "(Deutschland)" enthält - hier werden importierte Feiertage aussortiert
					Set Datum = session.CreateDateTime(Left(doc.RepeatInstanceDates(0), 10))
					If Cstr(Left(doc.Startdatetime(0),10)) <> CStr(Datum.Dateonly) Then     ' Wenn der erste DatumsWert des Feldes Startdatetime nicht dem ersten DatumsWert des Feldes RepeatInstanceDates entspricht
						ArrayNr = 0
						Set Startdatum = New NotesDateTime(Datum.Dateonly + " " + start.timeonly)
						Set Enddatum = New NotesDateTime (Datum.Dateonly + " " + ende.timeonly)
						Print "-----------------" + Betreff + "-----------------"
						Call doc.replaceItemvalue("EndDate",datum)
						Call doc.replaceItemvalue("EndTime",ende)
						Call doc.ReplaceItemvalue("StartDate",datum)
						Call doc.ReplaceItemValue("StartTime",start)
						ForAll z In doc.RepeatInstanceDates 		' Wenn einer der Datumswerte im Feld RepeatInstanceDates Jünger ist, als ein Jahr, dann wird der Jahrestag um 50 Jahre lang wiederholt
							Checkdatum = Left(z,10)
							If DateValue(Checkdatum) > DateValue(BedingungDatum) then
								ForAll z1 In StartDateTimeA
									z1 = Startdatum.LSLocalTime
									Call Startdatum.Adjustyear(1)
								End ForAll
								ForAll z2 In EndDateTimeA
									z2 = Enddatum.LSLocalTime
									Call Enddatum.Adjustyear(1)
								End ForAll
								Call doc.Replaceitemvalue("CalendarDateTime", StartDateTimeA)
								Call doc.Replaceitemvalue("RepeatInstanceDates", StartDateTimeA)
								Call doc.Replaceitemvalue("StartDateTime", StartDateTimeA)
								Call doc.Replaceitemvalue("EndDateTime", EndDateTimeA)
								Exit Forall
							End if
						End ForAll
						Call doc.save(True,False)
						Betreff = ""
						Datum = ""
						i = i+1
					End If
				End if
			End If
		End If
		Set doc = view.Getnextdocument(doc)
	Wend
	Print i " Dokumente bearbeitet"	
Exit Sub
Finish:
	Print "Ein unvorhergesehener Fehler ist aufgetreten:" Betreff
	Print i " Dokumente bearbeitet"	
End Sub




„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Array auf bestimmten Wert durchsuchen
« Antwort #17 am: 26.03.12 - 14:44:39 »
Ja, wenn Du das gleich geschrieben hättest... Ich habe ne fertige Datenbank zum Fixen des Blackberry- Kalender- Jahrestag- Bug...

Aber gut...

Nach Deinem Agenten hast Du leider in allen Deinen Datums- Feldern String- Arrays drin stehen... Ein ComputeWithForm mit erstem Parameter True würde das (auf Kosten der Laufzeit) grade ziehen, aber so ist das suboptimal...

Also im Prinzip habe ich es identisch zu Dir gelöst, nur dass ich noch ein Variables Repeat drin habe (die 50 sind nicht hardcodiert, sondern werden aus dem Dokument ausgelesen) und eben ECHTE NotesDate- Time- Werte ins Dokument schreibe...
Code
	Dim arrDtStart() As NotesDateTime
	Dim arrDtEnd() As NotesDateTime
...
					For i = 0 To (intRepeat - 1)
						Set arrDtStart(i) = New NotesDateTime( dtStart.Localtime )
						Set arrDtEnd(i) = New NotesDateTime( dtEnd.Localtime )
						Call dtStart.Adjustyear(1, True)
						Call dtEnd.Adjustyear(1, True)
					Next		
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Array auf bestimmten Wert durchsuchen
« Antwort #18 am: 26.03.12 - 15:44:39 »
Danke für die Antwort, Torsten :)

gut zu wissen. Nun hab ichs ja eh schon. Aber trotzdem vielen Dank für das Angebot!
Ich hab laut Dokumenteigenschaften überall Time / Date oder Time / Date Ranges als Datentyp stehen. Hab ich mich da dennoch vertan?

Die 50 Jahre ist ein kleiner Bonus, da es bei uns öfter mal die Aussagen gibt, dass Jahrestage fehlen. Der Grund dafür ist allerdings, dass die Standardwiederholung von Notes (10 Jahre) eingestelt worden war.


Chris
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Array auf bestimmten Wert durchsuchen
« Antwort #19 am: 26.03.12 - 16:17:53 »
Hmmm... das sieht sauber aus... Ich hatte überlesen, dass Du LSLocalTime verwendest, und das liefert ja tatsächlich (im Gegensatz zu LocalTime) einen Date- / Time- Variant... Also gilt, was ich geschrieben habe, natürlich nicht...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz