Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: theBastian am 08.06.06 - 12:16:42

Titel: bestimmten Index eines Arrays löschen
Beitrag von: theBastian am 08.06.06 - 12:16:42
Hi,

ich möchte ein Array prüfen. Falls ein Index mit einem bestimmten Wert beginnt, möchte ich diesen löschen und dann das Arrays neu dimensionieren.

Code
Dim session As New NotesSession
	Dim db As notesdatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument	
	Dim i As Integer	
	Dim strSoftwareEntry As String
	Set db = session.CurrentDatabase
	Set collection = db.UnprocessedDocuments
	
	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		
		For i = Lbound(doc.Feld) To Ubound(doc.Feld)
			strSoftwareEntry	 = Left$(doc.Feld(i), 9)	
			If strSoftwareEntry = "Wert" Then _
			doc.Feld(i) = ""			
		Next
		Redim doc.Feld(i) As String
		
		Call doc.Save( True, True )
		
		Set doc = collection.GetNextDocument(doc)
	Wend

Leider erhalte ich beim Löschen des Indexes (genauer beim Ändern in "") den Fehler "Illegal use of PROPERTY".

Wißt ihr, warum? Danke schonmal im voraus.

cu
Sebastian
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: dirk_2909 am 08.06.06 - 12:37:07
Hallo

Du musst alle gültigen werte in ein Array schreiben und anschließend das dem Feld zuweisen;

Dim arrNew( ) as String
dim i as Integer
...
....

While Not(doc Is Nothing)
      i= 0
      Forall strV in doc.Feld
                                   
                                   strSoftwareEntry   = Left$(strV, 9)   
         If strSoftwareEntry <> "Wert" Then
                                                             Redim Preserve arrNew( i )
                                                             arrNew( i ) = strV
                                                             i = i + 1
                                                End if
   
                   End Forall
   
      doc.Feld = arrNew   
      Call doc.Save( True, True )
      
      Set doc = collection.GetNextDocument(doc)
   Wend


Dirk
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: theBastian am 08.06.06 - 12:51:38
Danke für die schnelle Antwort.

Redim läuft dann für jeden Index außer denjenigen, der gelöscht werden soll.
Wenn die Schleife mehrmals läuft, ist das bestimmt nicht sonderlich per performant, oder?

Da muss es doch noch eine andere Lösung geben.

cu
Sebastian
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: koehlerbv am 08.06.06 - 12:54:42
Ja: Mit @Trim und @Replace in einem Evaluate-Statement.

Bernhard
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: LN4ever am 08.06.06 - 13:03:14
Das ist doch eigentlich der "klassische Einzeiler" - auf zwei Zeilen gestreckt, damit nur die Dokumente geändert werden, die das Feld enthalten.

@If(@IsUnavailable(Wertfeld);@Return("");NULL);
FIELD Wertfeld:=@Trim(@Unique(@Replace(Wertfeld;"Wert";"")))
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: theBastian am 08.06.06 - 13:10:41
Das ist doch eigentlich der "klassische Einzeiler" - auf zwei Zeilen gestreckt, damit nur die Dokumente geändert werden, die das Feld enthalten.

@If(@IsUnavailable(Wertfeld);@Return("");NULL);
FIELD Wertfeld:=@Trim(@Unique(@Replace(Wertfeld;"Wert";"")))

Den genauen Wert habe ich ja nicht.
Weiß nur, wenn der Index mit 'Wert' beginnt, dann lösche diesen.

Sebastian
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: Axel am 08.06.06 - 13:11:15
Hier gibt's auch noch eine Lösung:

Remove Element From Array (http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F872571570065B1B4)

Den genauen Wert habe ich ja nicht.
Weiß nur, wenn der Index mit 'Wert' beginnt, dann lösche diesen.

Aber irgendwo gekommst du doch den Wert her, oder?

Axel
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: dirk_2909 am 08.06.06 - 13:15:46
Versuch es mal so.

_wert := "deinwert" ;
_bListe :=  @Right( DeinFeld ; _wert ) ;
_replList := _wert + _bListe ;

_new := @Trim( @Replace( DeinFeld ; _replList ; "" ) ) ;

Field DeinFeld := _new ;


Natürlich musst Du die Formel umstrukturieren, damit sie in Evaluate passt ;-)

Dirk
Titel: Re: bestimmten Index eines Arrays löschen
Beitrag von: theBastian am 08.06.06 - 13:31:46
Danke Euch allen, für die Hilfe.

Mein Code sieht jetzt so aus:

Code
Dim session As New NotesSession
	Dim db As notesdatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument	
	Dim i As Integer	
	Dim strSoftwareEntry As String
	Dim result As Variant 
	Set db = session.CurrentDatabase
	Set collection = db.UnprocessedDocuments
	
	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		For i = Lbound(doc.Feld) To Ubound(doc.Feld)
			strSoftwareEntry	 = doc.Feld(i)
			If Left$(strSoftwareEntry, 9) = "Wert" Then _
			result =Fulltrim(Arrayreplace(doc.Feld, strSoftwareEntry	 , "")) 
		Next
		doc.Feld = result		
		Call doc.Save( True, True )
		
		Set doc = collection.GetNextDocument(doc)
	Wend

Und das Beste: er macht das, was ich will.

cu
Sebastian