Autor Thema: Dynamisches zwei-dimensionales array erstellen  (Gelesen 2072 mal)

Offline betty

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Dynamisches zwei-dimensionales array erstellen
« am: 31.05.04 - 10:40:16 »
Hat schon mal jemand ein dynamisches zwei-dimensionales array gebaut?  ???

Ich bin gerade dabei eine FTSearch über mehrere Datenbanken zu entwickeln. Ich möchte die Ergenisse in der jeweiligen DocumentCollection (für jede DB eine Collection) in einem dynamischen, zwei-dimensionalen array --> "searchresult()" sammeln und dieses dann der Methode "WriteResult( st_searchresult )" übergeben. Index1 beinhaltet die Datenbank, Index2 beinhaltet bestimmte Inhalte aus den Treffer-Dokumenten.

Problem: Bei mehrdimensionalen arrays funktioniert die Funktion Redim Preserve nur, wenn die letzte Dimension verändert wird. Wie schaffe ich es dann, nachdem die erste Collection durchlaufen ist und der Index2 immer um eins erhöht wurde, die Datenbank zu wechseln, d.h. den Index1 um eins zu erhöhen und bei Index2 wieder von vorne anzufangen?

Simples Beispiel, welches mein Problem auch darstellt:

Dim arrayLänderundStädte()

Collection1 mit Städten aus BW:
arrayLänderundStädte(Baden-Würrtemberg, Mannheim)
arrayLänderundStädte(Baden-Würrtemberg, Heidelberg)
...

Collection2 mit Städten aus Rheinland-Pfalz:
arrayLänderundStädte(Rheinland-Pfalz, Ludwigshafen)
arrayLänderundStädte(Rheinland-Pfalz, Speyer)
...

Wie kann ich beide Collections in ein Array packen??? Hoffentlich kann mir jemand helfen. Es muss ein dynamisches array sein, weil zu Beginn der Suche weder klar ist, wie viele DBs durchsucht werden sollen (das kann der User bestimmen), noch die Anzahl der Treffer bekannt ist.

Gruß
Bettina

Glombi

  • Gast
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #1 am: 31.05.04 - 11:17:43 »
Es gibt doch nur endlich viele Bundesländer, warum also muss der erste Index variabel sein?

Dynamische Arrays sind extrem unperformant. Alternativ kannst Du auch ein temporäres Dokument erstellen und dann dort Items (Felder) setzen:
Pro Index1 ein Feld mit Mehrfachwerten, welche dann Index2 repräsentieren.
Mit der Methode NotesItem.AppendToTextList füllst Du dann die Items.

Andreas

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #2 am: 31.05.04 - 11:25:14 »
diese Methode 'writeResult' - gibt es die schon oder willst du die auch erst noch erstellen?
Es geht mir darum, ob du gezwungen bist, ein 2D-Array zu benutzen, weil es die Methode erwartet.
« Letzte Änderung: 31.05.04 - 11:25:54 von Thomas Völk »
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline betty

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #3 am: 31.05.04 - 13:39:02 »
Das mit den Bundesländern war nur ein Beispiel. Die Bundesländer ensprechen den verschiedenen Datenbanken, die durchsucht werden und die Städte den gefundenen Dokumenten.

Die Methode WriteResult() ist noch in Bearbeitung. Sie sieht vor, das Ergebnis in einem RichtTextItem auszugeben. Ich dachte, ein 2-D-Array sei sehr geschickt, dann kann ich alles auf einmal übergeben. Ist also allgemein von dieser Art von Lösung abzuraten?

Ich bin ein absoluter Neuling in Sachen Notes. Welche Lösung wäre denn performant? Vielleicht einfach nach jeder Collection gleich die Methode WriteResult() aufrufen? Dann kann ich aber nicht alles in ein und daselbe RichtTextItem schreiben...

Bettina.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #4 am: 31.05.04 - 13:50:15 »
Übergib' WriteResult doch neben Deinem Suchergebnis auch das Ziel-RichTextItem gleich mit. Damit wird das Ganze dann gleich noch universeller.

HTH,
Bernhard

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #5 am: 31.05.04 - 13:58:53 »
erst mal ein Alternativvorschlag, der mir gerade eingefallen ist.

du machst deine Suche über n Datenbanken vermutlich in einer Schleife?!?

in jedem Durchlauf bekommst du ein DocumentCollection Objekt

das packst du in ein Array (1D)

dieses Array übergibst du einer Funktion, die dein RTFeld befüllt in dem sie über alle Dokumente in den Collections läuft und die benötigten Informationen ausliest und ins Feld schreibt.

ein Dokument in der DocumentCollection enthält den Inhalt, den du brauchst und die Information, aus welcher Datenbank es stammt.

keine Ahnung, ob das performant ist, oder nicht und es gibt bestimmt Raum für Verbesserungen. Ist halt eine Idee.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #6 am: 31.05.04 - 14:06:13 »
ja, oder das Feld als Parameter an die Funktion übergeben, dann gehts ganz ohne Array
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline betty

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #7 am: 01.06.04 - 09:41:35 »
Vielen Dank für die Hinweise!

Richtig, ich mache meine Suche über n DBs in einer Schleife.
Die Idee, die Collections-Objekte in ein 1-D-Array zu schreiben, dann der Methode WriteResult zu übergeben und erst dann die einzelnen Dokumente auszugeben hört sich gut an.

Wie funktioniert das mit dem "Feld als Parameter übergeben"? Da muss ich doch vorher schon den Befehl "itm_output = doc_current.CreateRichTextItem( {dsp_SearchResult} )" durchführen, oder?!
Zur Zeit meckert Notes mit folgender Fehlermeldung, wenn ich mehr als eine DB durchsuche: "Variant does not contain an object". Ich dachte ich prüfe einfach, ob ein RTItem dsp_SearchResult bereits ein Item hat, wenn ja, wird gleich zu der Stelle gesprungen, wo ich mit AppendText anfange. Ich dachte, er fügt das dann einfach dem vorhergehenden Item hinzu.

Bettina


Offline betty

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #8 am: 01.06.04 - 10:51:15 »
Hallo Thomas,

wie kann ich denn einem Array eine NotesDocumentCollection übergeben?? Das passt doch eigentlich vom Datantyp nicht.

Hab immer noch keine passende Lösung gefunden.  ???

Bettina.

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Dynamisches zwei-dimensionales array erstellen
« Antwort #9 am: 01.06.04 - 13:38:49 »
am besten deklarierst du dein Array als Variant, dann gibts keine Probleme, wenn du ihn als Parameter übergibst
der Rest ist nix ungewöhnliches.

Dim vaCollections as Variant

For i = 0 To 10
   Set dcFoundDocuments = db.ftSearch()
   Redim Preserve vaCollections(i)
   Set vaCollections(i) = dcFoundDocuments
Next

so in der Art müsste das klappen
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz