07-17-2024, 01:46 PM
Quote:If its completely erased, then why would ReDim not also be able to resurrect a new name for the array?@Dimster, it's OK! It took me a while to understand that too; I hope so.
Deleting with Erase only refers to the memory location of a declared array. Example: twoDimfield. If you now enter: ReDim threeDimfield, what is that supposed to do? The array threeDimfield wasn't even declared.
Code: (Select All)
'Zweidimensionales Feld mit Redim loeschen - 4. Feb. 2024
'Beispiel fuer Anwendung von Erase. Wird Erase auf ein dynamische
'Feld angewendet, existiert das Feld nicht mehr. Bei einem statischen
'Feld wird dieses mit Nullen gefuellt
$Console:Only
Option _Explicit
Option Base 1
Dim As Integer zeilenDim, spaltenDim
Dim As Integer i, j, z, fehlerNummer
On Error GoTo ausserhalbIndex
Locate 2, 2
Input "Feldimension Zeilen : ", zeilenDim
Locate 3, 2
Input "Felddimension Spalten: ", spaltenDim
'Feld mit Vorgaben initialisieren
Dim As Integer zweiDimfeld(zeilenDim, spaltenDim)
Locate CsrLin + 2, 2
z = 1
For i = 1 To zeilenDim
For j = 1 To spaltenDim
zweiDimfeld(i, j) = z
Print Using "## "; zweiDimfeld(i, j),
z = z + 1
Next
Print: Locate , 2
Next
'Vor Neudimensionierung Speicher freigeben. Ist bei Anwendung
'von REDIM nicht noetig, da dieser ERASE + DIM zusammenfasst - S.188
Locate CsrLin + 2, 2
Print "Redim: ";: Print "Wert von z = "; z
ReDim zweiDimfeld(zeilenDim, spaltenDim)
Locate CsrLin + 2, 2
For i = 1 To zeilenDim
For j = 1 To spaltenDim
zweiDimfeld(i, j) = z
Print Using "## "; zweiDimfeld(i, j),
z = z + 1
Next
Print: Locate , 2
Next
'Ohne Zeile, Spalte bleibt der alte Wert erhalten
ReDim zweiDimfeld(zeilenDim, spaltenDim)
Print: Print "Wert von z neu setzen."
Input "z: ", z
Locate CsrLin + 2, 2
For i = 1 To zeilenDim
For j = 1 To spaltenDim
zweiDimfeld(i, j) = z
Print Using "## "; zweiDimfeld(i, j),
z = z + 1
Next
Print: Locate , 2
Next
Locate CsrLin + 1, 2
Print "Anwendung von ERASE. Feld neu belegen:"
Erase zweiDimfeld
Locate CsrLin + 1, 2
Print "Nach ERASE existiert das Feld nicht mehr."
Locate CsrLin + 1, 2
z = 0
For i = 1 To zeilenDim
For j = 1 To spaltenDim
zweiDimfeld(i, j) = z
Print Using "## "; zweiDimfeld(i, j),
z = z + 1
Next
Print: Locate , 2
Next
'Locate CsrLin + 3, 2
'Error fehlerNummer
'Warum kommt hier eine Fehlermeldung?
ausserhalbIndex:
'If Err = 9 Then Error Err Else Print "Kein Zugriff! Feld existiert nicht mehr."
'Resume Next
End

