Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
nicok
Poster
Poster

Anmeldedatum: 15.05.2008
Beiträge: 161

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
Ü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
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.

Danach kannst du dem neuen Element mittels

Visual Basic: [code]Name_deines_Arrays(UBound(Name_deines_Arrays)) = Data[/code]

einen Wert zuweisen.
 
ZiG
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 421


Verfasst am: 01.09.2008, 20:06

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
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.

Werd mal morgen ein paar Sachen ausprobieren.
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: array, dimensionieren, füllen, anzahl, schleife

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Ganzen Ordner hochladen? (msinet.ocx) 1040 05.11.2007, 02:53
Keine neuen Beiträge Gesamten Ordner löschen?! 512 04.09.2007, 22:39
Keine neuen Beiträge Ordner löschen 918 06.04.2007, 17:27
Keine neuen Beiträge Daten in einen Ordner schreiben 885 25.03.2007, 14:12
Keine neuen Beiträge Ordner - "Virus" 680 24.03.2007, 00:09
 


[ Time: 0.1240s ][ Queries: 94 (0.0647s) ][ GZIP on - Debug on ]