ReDim ohne das man den Array schon dimensieoniert hat

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
brotkasten-deluxe
Beiträge: 147
Registriert: 29.08.2004 01:43
Wohnort: Germany
Kontaktdaten:

ReDim ohne das man den Array schon dimensieoniert hat

Beitrag von brotkasten-deluxe »

So ich hab im Englischen fOrum was wegen dem ReDim gefunden :

Code: Alles auswählen

Dim a(5)
Procedure ListA(count)
  For i = 0 To count
    PrintN("A(" + Str(i) + ") = $" + Hex(a(i)))
  Next i
  Input()
EndProcedure
   
Procedure Redimb(OldCount, NewCount)
  SizeOfA = (OldCount + 1) * 4
  OldAddressOfA = @a()
 
  Dim a(NewCount)
  CopyMemory(OldAddressOfA, @a(), SizeOfA)
EndProcedure 


OpenConsole()
   
a(0) = $A
a(1) = $B
a(5) = $C

ListA(5)

Redimb(5, 10)

a(7) = $D
a(10) = $E

ListA(10)

CloseConsole()
Hier sieht man , dass der Array a() schon dimensioniert ist . Was aber muss ich tun wenn ich den array a() danach dimensiorien will :

Code: Alles auswählen

;Dim a(5) Hier entfernen <<<<<<<<<<<<<<<<<<<<<<
Procedure ListA(count)
  For i = 0 To count
    PrintN("A(" + Str(i) + ") = $" + Hex(a(i)))
  Next i
  Input()
EndProcedure
   
Procedure Redimb(OldCount, NewCount)
  SizeOfA = (OldCount + 1) * 4
  OldAddressOfA = @a()
 
  Dim a(NewCount)
  CopyMemory(OldAddressOfA, @a(), SizeOfA)
EndProcedure 

Dim a(5) ;<<<<<<<<<<<<<< Wenn Dim erst hier auftritt kommt ein Fehler bzw wie kann ich den verhindern
OpenConsole()
   
a(0) = $A
a(1) = $B
a(5) = $C

ListA(5)

Redimb(5, 10)

a(7) = $D
a(10) = $E

ListA(10)

CloseConsole()
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Mach einfach Dim a(0)

Das is dann zwar immernoch eine Longvariable, anders geht´s aber glaub ich nicht :|
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

In dem zweiten Beispiel ist die globale Variable in den Prozeduren nicht bekannt, und deshalb ein Fehler.

Fehlerbeseitigung: Nimm Beispiel 1 :D
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
brotkasten-deluxe
Beiträge: 147
Registriert: 29.08.2004 01:43
Wohnort: Germany
Kontaktdaten:

Beitrag von brotkasten-deluxe »

ts-soft hat geschrieben:In dem zweiten Beispiel ist die globale Variable in den Prozeduren nicht bekannt, und deshalb ein Fehler.

Fehlerbeseitigung: Nimm Beispiel 1 :D
das is aber absicht . In meinem eigentlichen code kenn ich die größe des array noch net desshalb wollt ich wissen wie man das halt re dimensionieren kann
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Wieso kennst du die denn nicht?
Hast du´s nicht dimensioniert?
Wer hat das array denn zuvor dimensioniert?

Was ich damit meine, speicher doch einfach in ner variablen, wie groß das array ist

Code: Alles auswählen

x=10
Dim der(x)
Redim(x,40)
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
brotkasten-deluxe
Beiträge: 147
Registriert: 29.08.2004 01:43
Wohnort: Germany
Kontaktdaten:

Beitrag von brotkasten-deluxe »

Franky hat geschrieben:Wieso kennst du die denn nicht?
Hast du´s nicht dimensioniert?
Wer hat das array denn zuvor dimensioniert?

Was ich damit meine, speicher doch einfach in ner variablen, wie groß das array ist

Code: Alles auswählen

x=10
Dim der(x)
Redim(x,40)
ja aber ich kenne x nicht , das is bei mir die anzahl der zeichen in einer zeile aber es hat sich erledigt ich hab einfach von anfang an anders ge"dimt" <)

Der gute alte IF befehl hat mir wieder geholfen ^^^^^^^^ <) :mrgreen: :allright:
Antworten