Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
zwergnase
Anmeldungsdatum: 03.01.2006 Beiträge: 26 Wohnort: Frankfurt am Main
|
Verfasst am: 31.07.2006, 14:54 Titel: Array erweitern |
|
|
Hallo nochmal.
Ich wollte fragen wie man ein Array erweitern kann.
Also aus Array(1 to 2), Array(1 to 3) erzeugen ohne den Inhalt bisherigen Inhalt zu verlieren.
Martin |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 31.07.2006, 15:25 Titel: |
|
|
Wenn mich nicht alles täuscht, musst du das Array erst irgendwo zwischensichern, zum Beispiel in einem anderem Array oder einer Datei. Ich werde das im folgenden mal am Beispiel einer Datei erklären.
Code: |
FNR=FreeFile ' freie Dateinummer finden
Open "~array.tmp" For Output As #FNR
For Sichere=LBound(DasArray) To UBound(DasArray) ' von der unteren Grenze bis zur oberssten Grenze das ganze Array durcharbeiten
Print #FNR, DasArray(Sichere)
Next Sichere
Close #FNR
AnfangAlt=LBound(DasArray)
EndeAlt=UBound(DasArray)
ReDim DasArray(NeueGroesse) ' Neue Größe des Arrays festlegen
FNR=FreeFile
Open "~array.tmp" For Input As #FNR
For Wiederherstellen=AnfangAlt To EndeAlt
Line Input #FNR, DasArray(Wiederherstellen) ' Werte wieder einlesen
Next Wiederherstellen
Close #FNR
Kill "~array.tmp" ' temporäre Datei wieder löschen
|
Ich hoffe, dass der Code funktioniert (kanns net ausprobieren) und dass das verständlich genug war.
Grüße,
Mao _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
zwergnase
Anmeldungsdatum: 03.01.2006 Beiträge: 26 Wohnort: Frankfurt am Main
|
Verfasst am: 31.07.2006, 15:59 Titel: Alles klar soweit, aber unschön |
|
|
Danke für die Antwort. Genau das hab ich befürchtet.
Gibt es keine elegantere Variante als das Array zwischenzuspeicher?
Martin |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 31.07.2006, 17:32 Titel: |
|
|
Eine weitere, aber ebenso unelegante Methode wäre, das Array gleich mit der größten Dimension zu erstellen(also wenn du weißt, das es maximal 100 Einträge gibt, erstellst du ein Array der Größe 100). Dann brauchst nur noch eine Variable , welche die momentane Länge speichert. Oder du speicherst die momentane Länge in Index 0 des Arrays... Aber wie gesagt, das ist auch nur dirty drumherumgeschifft.  _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 31.07.2006, 18:37 Titel: |
|
|
Ist doch egal, wie es funktionert... Hauptsache es geht überhaupt
Also ich freu mich immer über jede Codezeile, die dazukommt
Außerdem ist der Code, finde ich, gar nicht so übermäßig lang...
Grüße, Elvis _________________ Geforce 7300GT (256MB GDDR3, Gainward) -- 2x 512MB (DDR2 800, MDT) -- AMD Athlon64 X2 EE 3800+ -- Asrock ALiveNF5-eSATA2+ |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 01.08.2006, 11:39 Titel: |
|
|
Stimmt, die DYNAMIC muss noch hinzugefügt werden.
PRESERVE gibt's leider aber wirklich nur im PDS.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 13.09.2006, 09:15 Titel: |
|
|
Code: | dim array(1 to 100) as integer
dim dummy(1 to 100) as integer
dim length as integer
dim entryArray_1, entryArray_2 as integer ptr
entryArray_1 = *array(1)
entryArray_2 = *dummy(1)
length = len(array)
asm
mov esi, [entryArray_1]
mov edi, [entryArray_2]
mov ecx, [length]
rep movsb
end asm
redim array(1 to 200)
entryArray_1=*array(1)
asm
mov esi, [entryArray_2]
mov edi, [entryArray_1]
mov ecx, [length]
rep movsb
end asm |
Also bei mir funktioniert es, ganz einfach mittels Blocktransport. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
|
Nach oben |
|
 |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 13.09.2006, 18:32 Titel: |
|
|
@jb
danke - ist mir garnicht aufgefallen das ich im falschen Forum bin... |
|
Nach oben |
|
 |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 13.09.2006, 21:35 Titel: |
|
|
'dynamic kann man bei qb7.1 aber weglassen _________________ Die Antworten zu fast allen Fragen des Lebens findest du entweder im MonsterFAQ oder der Befehlsreferenz - Und wenn du gar nicht mehr weiter weisst ? -> Wikipedia
ALLE RECHTSCHREIBFEHLER DIE ICH MACHE SIND BEABSICHTIGT, DAMIT DIE LEUTE, DIE SPAß DARAN HABEN SOLCHE ZU FINDEN, ETWAS ZU TUN HABEN
Zuletzt bearbeitet von alfonsospringer am 14.09.2006, 14:00, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 13.09.2006, 22:26 Titel: |
|
|
Moderne Programmiersprachen / Compiler / Klassenbibliotheken bieten in diesem Zusammenhang Listen an. Diese sind dann speziell für das dynamischen Wachsen optimiert.
QB bietet etwas Vergleichbares nicht einmal im Ansatz. Am ehesten lässt sich noch ein String dazu missbrauchen (Auf Elemente CVx()/MID$() zugreifen bzw. mit MKx$() Änderungen vornehmen), ebenso kann in einzelnen Fällen auch eine temporäre Datei geeignet sein.
Falls Daten aus einer Datei in ein Feld eingelesen werden sollen, kann es sinnvoll sein, zuerst einen Grössenanalyse-Lesegang durchzuführen. Hatte ich früher bei der Musiksammlung so gelöst. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|