Arrays dimensionieren bei unbekannter Anzahl Verfasst am: 01.09.2008, 18:19
Hi,
ich hab ein Problem unzwar möchte ich ein Array benutzen und weiß jedoch nicht mit wievielen Einträgen ich diesen Füttern werde.
Das Problem ganz diskret liegt bei dem Redim da ich nun ja nicht weiß wieviele Einträge ich brauche:
Dim MyArray() as String ReDim MyArray(x)
Hier die x weiß ich nicht..
Das ganze soll so werden das ich einen Ordner nach Dateien durchsuchen werde und alle Dateinamen die auf .jpg enden in den Array eingetragen werden sollen.
Theoretisch müsste ich vorrher mit einer Schleife die Anzahl ermitteln, dann den Array damit demonisieren und dann wieder eine Schleife laufen lassen um den Array zu füllen. Das ganze würde jedoch zu viel Rechenarbeit verursachen, deshalb such in nach einer anderen Möglichkeit!
sollniss Überflieger
Anmeldedatum: 01.05.2008 Beiträge: 699
Verfasst am: 01.09.2008, 18:23
Pseudocode: Visual Basic: [code]for i = 1 to anzahlvondateien if endung von datei i = ".jpg" then redim preverse myarray(ubound(myarray +1)) ' oder preserve? myarray(ubound(myarray) = datei i mache weid0r[/code]
KleinesVoodoo Coder
Anmeldedatum: 17.04.2008 Beiträge: 78
Verfasst am: 01.09.2008, 18:39
Visual Basic: [code]If (Not Not Name_deines_Arrays) <> 0 Then 'Es ist mindestens ein Element vorhanden ReDim Preserve Name_deines_Arrays(UBound(Name_deines_Arrays) + 1) 'Neues Element hinzufügen Else 'Es ist kein Element vorhanden ReDim Name_deines_Arrays(0) 'Erstes Element hinzufügen End If[/code]
Das Visual Basic: [code]UBound(Name_deines_Arrays) + 1[/code] entspricht der Anzahl der Elemente + 1. Dein neuer höchster Index.
Preserve ist leider verdammt langsam. Könnte also einige Probs geben wenn es sich um viele Dateien handelt.
Ne andere Möglichkeit wäre die Dateinamen einzulesen und zu einem einzigen String zusammenzuhängen. Dazwischen ein Trennzeichen und später einfach Splitten. Dann bräuchtest du das Array nicht jedesmal neu zu dimensionieren. Hat aber auch nen Geschwindigkeitsnachteil beim zusammenfügen der Strings.
Oder. Einfach ein Array sehr groß dimensionieren. Ist ne ziemlich unschöne Art zu coden, dafür aber schnell. Du brauchst das Array nur füllen und nen Zähler mitlaufen lassen der dir sagt wieviele Dateinamen es waren.
Oder du nutzt einfach eine unsichtbare Listbox/ListView wo du die Daten hineinschreibst. Auch nicht gerade professionell und auch etwas langsam. Aber dafür leicht zu handhaben.
Richtig wäre es eigentlich erstmal zu ermitteln wieviele jpg Dateien vorhanden sind und das Array dann passend zu dimensionieren. Das ist vielleicht nicht das schnellste, aber auch nicht langsamer als die anderen Varianten. Wobei ich vermute das die Variante mit preserve die langsamste ist.
nicok Poster
Anmeldedatum: 15.05.2008 Beiträge: 161
Verfasst am: 01.09.2008, 23:26
Genau das hab ich mir auch überlegt und nach dem Kriterium möchte ich auch mich entscheiden: der Geschwindigkeit und Prozessorauslastung
Bisher hab ich unsichtbare Listboxen verwendet, was ich nun aber nach ner Zeit lang doch unschön finde und es kommt mir auch langsam vor.
Das mit den String und Trennzeichen wird glaub ich viel Zeit kosten beim Zerlegen.
Dieses ständige Redim in der Schleife selbst wird wohl auch einiges an Zeit kosten.