Autor Thema: bestimmten Index eines Arrays löschen  (Gelesen 2189 mal)

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
bestimmten Index eines Arrays löschen
« 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
« Letzte Änderung: 08.06.06 - 20:23:34 von SKL74 »
Domino, Notes, Sametime

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: bestimmten Index eines Arrays löschen
« Antwort #1 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
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: bestimmten Index eines Arrays löschen
« Antwort #2 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
Domino, Notes, Sametime

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: bestimmten Index eines Arrays löschen
« Antwort #3 am: 08.06.06 - 12:54:42 »
Ja: Mit @Trim und @Replace in einem Evaluate-Statement.

Bernhard

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: bestimmten Index eines Arrays löschen
« Antwort #4 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";"")))
Situs vilate in isse tabernit.

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: bestimmten Index eines Arrays löschen
« Antwort #5 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
Domino, Notes, Sametime

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: bestimmten Index eines Arrays löschen
« Antwort #6 am: 08.06.06 - 13:11:15 »
Hier gibt's auch noch eine Lösung:

Remove Element From Array

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
« Letzte Änderung: 08.06.06 - 13:15:30 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: bestimmten Index eines Arrays löschen
« Antwort #7 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
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: bestimmten Index eines Arrays löschen
« Antwort #8 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
Domino, Notes, Sametime

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz