Autor Thema: ArrayGetIndex liefert nur einen Treffer  (Gelesen 1821 mal)

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
ArrayGetIndex liefert nur einen Treffer
« am: 24.04.13 - 14:07:41 »
Hallo zusammen,

ich bastel mal wieder an der automatisierten Quotenregelung für unsere Mailserver und versuche dort eine Sondersteuerung für ausgewählte User zu implementieren.

Ausgelöst wird das ganze zur Zeit noch über einen Schalter in einer Maske. In dieser Maske werden in einem Feld die User eingetragen, für die eine Sonderegelung gilt und die Quote, die zugünftig gelten soll.

Beispiel
userid001#3072
userid002#2048
userid003#4096

Die ID des Users ist auch gleichzeitig der Dateiname (ohne .nsf) der Maildatenbank. Beim Durchlaufen aller Mail-DB möchte ich prüfen, ob die aktuelle Datenbank einem User in der Sondersteuerung gehört.

Dazu erzeuge ich mir 2 Arrays (1x Typ String, 1x Typ Integer), das erste wird mit den UserIDs gefüllt und das zweite mit der dazugehörigen Quote.

Code
'Aufbau der beiden Arrays
	For sunum = sonderLB To sonderUB
		sonderuser(sunum) = Ucase(Strtoken(sonder(sunum),"#",1))
	Next
	
	For sunum = sonderLB To sonderUB
		sonderquota(sunum) = Strtoken(sonder(sunum),"#",2)
	Next	


'Sondersteuerung
	userid	= Ucase(Trim(Strtoken(db.FileName,".",1)))
	ipos		= Arraygetindex(sonderuser,userid)
			
	If  Not (Isnull(ipos)) Then
		quotaSizeNew = sonderquota(ipos)
		Print "Sonderuser: " & userid & " ---> Quota: " & quotaSizeNew
	Else
		If quotaSizeNew <= 1024 Then
			quotaSizeNew = 1024
		Elseif qoutaSizeAkt < quotaSizeNew Then
			quotaSizeNew = qoutaSizeAkt			
		End If
	End If

Das komplette Script läuft sauber durch, aber der Vergleich der jeweiligen UserID mit dem Inhalt des 'sonderuser-Arrays' liefert immer nur einen Treffer für die Indexposition 0, alle weiteren Prüfungen ergeben NULL. Ich habe mir das im Debugger angesehen und selbst wenn die Variable 'userid' den zweiten oder dritten Wert in meiner Userliste annimmt, liefter ArrayGetIndex ein NULL zurück.

Hat jemand ne Idee, woran das liegen könnte? Würde ungern auf eine Schleife zum Durchsuchen des Arrays zurückgreifen.


Gruß
Dirk
« Letzte Änderung: 29.04.13 - 11:41:32 von Keydins »
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: ArrayGetIndex liefert nur einen Treffer
« Antwort #1 am: 24.04.13 - 14:13:41 »
Hallo,

Kleine Frage am Rande.
Warum verwendest Du keine Listen?

Und die Arrays sind auch wirklich gefuellt?
Ich frage nur deshalb, weil ich mir aus Deinem Code-Schnipsel nicht erklaeren kann,
woher sonderLB und sonderUB kommen.
Eventuell belegst Du diese ja irgendwo vorher.


Andreas
« Letzte Änderung: 24.04.13 - 14:16:46 von ascabg »

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: ArrayGetIndex liefert nur einen Treffer
« Antwort #2 am: 24.04.13 - 14:18:16 »
Hmmm, Gewohnheit?  ;D

Aber prinzipiell wäre mir das Konstrukt egal, hauptsache es läuft performant. Kann ich bei ner Liste auch mit nem Index arbeiten?


[update]

Grade mal ein

   For sunum = sonderLB To sonderUB
      Print sonder(sunum)   
   Next

in den Code eingebaut und ohne Debuger bekomme ich nur eine Printausgabe, während der Debugger in seinem Ausgabetab die passende Anzahl an Ausgaben und die jeweils korrekten Werte liefert...  ???
« Letzte Änderung: 24.04.13 - 14:24:26 von Keydins »
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: ArrayGetIndex liefert nur einen Treffer
« Antwort #3 am: 24.04.13 - 14:24:24 »
Da gibt es die ListTags.

Code
Dim dblSonderSize List As Double

For sunum = sonderLB To sonderUB
       dblSonderSize(Ucase(Strtoken(sonder(sunum),"#",1))) = Ucase(Strtoken(sonder(sunum),"#",2))
Next

Und Zugreifen kannst Du auf die einzelnen Elemente der Liste ueber Ihren ListTag.
z.B.
If db.Size > dblSonderSize("USERID001") Then ...

Code ist nicht geprueft.


Andreas

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: ArrayGetIndex liefert nur einen Treffer
« Antwort #4 am: 24.04.13 - 14:26:17 »
Ok, dann schau ich mir das mit der Liste nochmal genauer an.

Danke für den Tip.


Gruß
Dirk
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: ArrayGetIndex liefert nur einen Treffer
« Antwort #5 am: 29.04.13 - 11:46:34 »
Problem erkannt, Problem gelöst.

Meine ursprüngliche Befüllung der Arrays schleppte die Zeilenumbrüche aus dem Eingabefeld mit, somit klappte der Vergleich ab dem 2. Arryeintrag nicht mehr.

Manchmal muss man sich echt mal ein WE lang Abstand von einem Problem gönnen.  8)
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz