Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: brathaenchen am 16.08.05 - 10:56:08
-
Hi
wie kann ich ein Array dynamisch definieren?
Ich habe zur Zeit:
Dim st_Fields(1 To 100) As String
Möchte aber gerne das es dynamisch ist.
Dim st_Fields() As String und Dim st_Fields(collection2.count) As String probiert aber das funktionierte leider nicht.
Danke schon mal!!!
Dim collection2 As NotesDocumentCollection
Dim currentResponse As NotesDocument
Set collection2 = doc.Responses
Dim number As Long
number = 1
Dim csv As CSVFile
Dim st_Fields(1 To 100) As String
Set currentResponse = collection2.GetFirstDocument ()
While Not currentResponse Is Nothing
st_Fields(number) = currentResponse.CSVField(0)
number = number + 1
'Msgbox "Hier kommt jetzt was " + currentResponse.CSVField(0)
Set currentResponse = collection2.GetNextDocument ( currentResponse )
Wend
-
Schau dir mal in der Notes-Hilfe das gute alte Redim Preserve an...
Gruß
-
ok habs gefunden danke
-
Das so einzusetzen kann mit deutlichen Performanceeinbrüchen bestraft werden, speziell dann wenn man es in der Art eines Zählers verwendet. Je nach Kontext ist es sinnvoller mit Lists oder mit einem Redim zu arbeiten vor dem man die Anzahl der benötigten Elemente rausbekommt.
-
Ok ok...aber er sprach auch nicht davon, dass er ein schnelles Array haben will :o :o
Gruß
-
Hmm irgendwie haut das nicht hin. Bekommen
bei ReDim Preserve myNames(anzahl) ein subscrit ot of range??
-
Tipp doch bitte mal ein paar Codezeile mehr ein.
Andreas
-
Ja irgendwie fehlt da ein bischen was. der erste Dim zum Bleistift. Und der Typ auch.
-
Also hier kommt der Code:
Dim collection2 As NotesDocumentCollection
Dim currentResponse As NotesDocument
Set collection2 = doc.Responses
Dim number As Long
number = 1
Dim csv As CSVFile
Dim st_Fields() As String
ReDim Preserve st_Fields(collection2.count)
Set currentResponse = collection2.GetFirstDocument ()
While Not currentResponse Is Nothing
st_Fields(number) = currentResponse.CSVField(0)
number = number + 1
Set currentResponse = collection2.GetNextDocument ( currentResponse )
Wend
-
Hi,
wenn du das so machst, dann brauchst du kein Preserve.
Dim st_Fields() As String
ReDim st_Fields(collection2.count)
Set currentResponse = collection2.GetFirstDocument ()
While Not currentResponse Is Nothing
st_Fields(number) = currentResponse.CSVField(0)
number = number + 1
Set currentResponse = collection2.GetNextDocument ( currentResponse )
Wend
Axel
-
genau das hab ich auch gedacht aber dann bekomm ich ein Subscript out of Range...
-
Starte mit
number = 0
und nicht mit
number = 1
sonst läuft die Schleife aus dem Ruder ;)
Andreas
-
wieso kann die dann aus dem Ruder laufen?
-
Nimm mal Bleistift und Papier und dann mache ein Beispiel.
collection2.Count = 2
number = 1
number = 2
number = 3 - oops
Andreas
-
ja ok stimmt aber das hätte an der stelle nix gemacht...
Hat einer eine idee warum das mit dem Array nicht hinhaut?
-
Ich gebs auf :-:
Andreas
-
Sag mal liest du auch was man dir schreibt? ::)
number = 1 funktioniert nicht weil Arrays immer mit 0 anfangen zu zählen. und wenn du jetzt immer um eins erhöhst kommst du nicht am ende des definierten Arrays an sondern bei Arraysize+1. Das gibt es aber nicht.
Und bitte tu dir und uns einen Gefallen. Nimm dir ein paar Kurse zur Hand mach die durch und verwende die Forumsmitglieder nicht als Ausbilder. Darauf reagieren wir nämlich mit zunehmender Dauer immer empfindlicher.
-
Noch ein Auszug aus der DesignerHelp:
If the module does not include an Option Base statement, the default lower bound for all dimensions of all arrays is 0. For example, a one-dimensional array of 10 elements would use subscripts 0 through 9.
Und das findet sich an etlichen Stellen. Lesen bildet. Wirklich.
Bernhard