array
Moderator: Moderatoren
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
array
ich möchte aus einem mehrdemensionalen Array, welches aus 3 einzelnen Elementen besteht, eine Reihe mit den 3 Elementen löschen.
aber in der Hilfe ist nur eine Anleitung Adel() für einfaches Array
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
Re: array
wenn ich Dich richtig verstehe hast Du ein Array, dessen einzelnen Elemente aus einem Unterarray mit drei Elementen besteht.
Code: Alles auswählen
{{1.1, 1.2, 1.3}, ;
{2.1, 2.2, 2.3}, ;
{3.1, 3.2, 3.3}}
Jan
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: array
Bei
Code: Alles auswählen
A := {1,{2,2,2},3}
Z.B. durch
Code: Alles auswählen
ADel( A,2 )
Code: Alles auswählen
{ 1,3,NIL }
Code: Alles auswählen
ADel( A[2],2 )
Code: Alles auswählen
{1,{2,2,NIL},3}
Uli
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: array
Code: Alles auswählen
Adel(aUProd[i],i)
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: array
NEIN denn :Rolf Ramacher hat geschrieben:wäre denn das so derSyntax - beim durchlaufen des Arrays mit for next ??Code: Alles auswählen
Adel(aUProd[i],i)
für eine FOR / NEXT Schleife solltest du AREMOVE() nehmen und vom Ende (!) anfangen zu löschen.Die Array-Funktion ADel() löscht den Inhalt eins Elements aus einem Array. Der Inhalt bzw. Wert des Elements geht verloren und alle folgenden Elemente rücken um eine Position auf. Der Wert des letzten Elements wird NIL. Die Anzahl der Arrayelemente Len(<aArray>) bleibt durch ADel() unverändert. Um nach ADel() das letzte Element zu entfernen, muß die Funktion ASize() verwendet werden.
Jimmy
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
Re: array
wie ich und andere gesagt haben - lösche das Hauptelement, und damit sind auch alle Unterelemente automatisch weg. Also ADel(aArray, 2), und 2.1, 2.2, und 2.3 sind ebenfalls weg.
Jan
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: array
Wer Arrays aus anderen Sprachen kennt hat eventuell Probleme damit zu verstehen wieso das in Xbase viel flexibler funktioniert.
In PowerBasic oder Delphi oder C ist ein Array mit Zahlen in 5 Zeilen und 2 Spalten im Prinzip ein Speicherbereich für 5x2 Zahlenwerte (LONG wäre also 4 Byte * 5* 2) also 40 Byte hintereinander (ähnlich wie in einer binärdatei).
In PowerBasic oder Delphi oder C kann man NICHT eine komplette Zeile ansprechen sondern immer nur ein Element. Dort kann man auch nicht einfach eine Zeile löschen (man muss umkopieren).
Jedes Array Element muss vom gleichen Typ sein !
Xbase++ hingegen verwaltet immer nur eindimensionale Arrays
Allerdings können die Elemente selbst auch wieder Arrays sein.
Das obige Beispiel belegt also 5 Speicherblöcke die auf 2 Byte Speicherbereiche verweisen:
Code: Alles auswählen
{ {1,11}, {2,22}, {3,33}, {4,44}, {5,55} }
Code: Alles auswählen
aWert[2,2] => 22
aWert[2][2] => 22
Code: Alles auswählen
aWert[2] => {2,22}
oder meist sinnvoller die Zeile komplett zu löschen UND die Zeile komplett entfernen: AREMOVE()
Code: Alles auswählen
AREMOVE(aWert,2)
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Re: array
Oder von Anfang bis Ende durchlaufen (Kondition FOR i := 1 to Len(a)) und i dekrementieren, wenn ein Eintrag gelöscht wird:für eine FOR / NEXT Schleife solltest du AREMOVE() nehmen und vom Ende (!) anfangen zu löschen.
Code: Alles auswählen
FOR i := 1 TO Len(a)
IF LoeschBedingung()
ARemove(a,i)
i --
ENDIF
NEXT
Tom
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: array
Jan, Du meinst sicher:Jan hat geschrieben:...lösche das Hauptelement, und damit sind auch alle Unterelemente automatisch weg. Also ADel(aArray[2]), und 2.1, 2.2, und 2.3 sind ebenfalls weg.
Code: Alles auswählen
ADel( aArray,2 )
Tom, das ist aber von hinten durch die Brust in's AugeTom hat geschrieben:...Oder von Anfang bis Ende durchlaufen (Kondition FOR i := 1 to Len(a)) und i dekrementieren, wenn ein Eintrag gelöscht wird:Code: Alles auswählen
FOR i := 1 TO Len(a) IF LoeschBedingung() ARemove(a,i) i -- ENDIF NEXT
Wenn alles gelöscht werden soll, kannst Du gleich
Code: Alles auswählen
ARemove( a,1/*nStartPos*/,len(a)/*nCount*/ )
Code: Alles auswählen
a := {}
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Re: array
Soll ja nicht. Man achte auf die Feinheiten:Wenn alles gelöscht werden soll, kannst Du gleich
Code: Alles auswählen
IF Loeschbedingung()
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Re: array
Das würde ich nicht empfehlen, weil es in bestimmten Situationen dazu führen kann, dass das Array doch erhalten bleibt. Lieber das hier:wenn es egal ist, dass der Zeiger auf das array verloren geht, einfach
Code:
a := {}
Code: Alles auswählen
aSize(a,0)
Code: Alles auswählen
a1 := {1,2,3}
a2 := a1
aRemove(a1,1)
* Achtung: a2 enthält jetzt auch nur noch {2,3}
Code: Alles auswählen
a1 := {1,2,3}
a2 := aClone(a1)
aRemove(a1,1)
* a2 enthält jetzt immer noch {1,2,3}
Tom
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: array [ERLEDIGT]
alles erledigt. ja mit adel werden ja nur die Inhalte des arrays gelöscht, aber nicht die arrayposition selbst. alles klar danke hat funkt.