Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  2D Array sortieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  2D Array sortieren (797 mal gelesen)
Booyaka
Mitglied



Sehen Sie sich das Profil von Booyaka an!   Senden Sie eine Private Message an Booyaka  Schreiben Sie einen Gästebucheintrag für Booyaka

Beiträge: 122
Registriert: 22.06.2012

CATIA V5 R19, 24, 26, 28, 29

erstellt am: 17. Jan. 2019 12:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Array1.JPG

 
Hallo,

ich hätte da wieder einmal ein Problem.

Aufgabe:

Koordinaten der Endpunkte von Linien auslesen (nach Möglichkeit sortiert). und in .txt-Datei überführen


Momentaner Stand:
Wegen dieser Aufgabe beschäftige ich mich seit ein paar Tagen mit Arrays und versuche rauszufinden wie das so funktioniert ^^'.

Also ein Array aufzubauen krieg ich jetzt schonmal hin (s. Anhang).
Und hier mal noch ein Auszug aus dem Code:

Code:

    '------------ Anzahl der Linien ermitteln
    oSearch = oSel.Search("Type=Line,sel")
    oCountLine = oSel.Count
    'MsgBox ("Anzahl der Linien: " & oCountLine)


    '------------ Erzeugen des GeoSets für die Punkte
    Set oRefPointGeoset = oHybridBodies.Add()
    oRefPointGeoset.Name = "RefPoints"
    Set oHybridShapePoints = oRefPointGeoset.HybridShapes


    '------------ Referenzlinien
    Set oRefLineGeoSet = oHybridBodies.Item(oSelName)
    Set oHybridShapes = oRefLineGeoSet.HybridShapes
   

    '------------  Vorbereitung für die Schleife
    Dim oPoint1Coords(2)
    Dim oPoint2Coords(2)
    Dim oP1, oP2, oArrY, oArrYMax As Integer
    oP1 = -1
    oP2 = 0
    oArrY = -1
    oArrYMax = oCountLine - 1
   
    Dim oArr()
    ReDim oArr(5, oArrYMax)
    '------------ Schleife zum Erzeugen der Endpunkte und schreiben in ein Array
    For i = 1 To oCountLine
        oP1 = oP1 + 2
        oP2 = oP2 + 2
        oArrY = oArrY + 1
       
        Set oRefLine = oHybridShapes.Item(i)
        Set oReference = oPart.CreateReferenceFromObject(oRefLine)

        Set oPoint1 = oHybridShapeFactory.AddNewPointOnCurveFromDistance(oReference, 0, False)
        oRefPointGeoset.AppendHybridShape oPoint1
        oPart.UpdateObject (oPoint1)

        Set oPoint2 = oHybridShapeFactory.AddNewPointOnCurveFromPercent(oReference, 1, False)
        oRefPointGeoset.AppendHybridShape oPoint2
        oPart.UpdateObject (oPoint2)
       
        oHybridShapePoints.Item(oP1).GetCoordinates oPoint1Coords
        oHybridShapePoints.Item(oP2).GetCoordinates oPoint2Coords
       
        oX1 = Round(oPoint1Coords(0), 3)
        oY1 = Round(oPoint1Coords(1), 3)
        oZ1 = Round(oPoint1Coords(2), 3)
        oX2 = Round(oPoint2Coords(0), 3)
        oY2 = Round(oPoint2Coords(1), 3)
        oZ2 = Round(oPoint2Coords(2), 3)
       
        oArr(0, oArrY) = oX1
        oArr(1, oArrY) = oY1
        oArr(2, oArrY) = oZ1
        oArr(3, oArrY) = oX2
        oArr(4, oArrY) = oY2
        oArr(5, oArrY) = oZ2
    Next



(für Verbesserungsvorschläge für den Code wär ich auch dankbar ^^')

Dazu hätt ich dann jetzt auch mal eine Frage beim googeln bin ich da nicht so schlau drauss geworden.


Fragen:
Ich werd aus dem sortieren noch nicht ganz so schlau.

1. Wenn ich jetzt nach X1 sortieren würd (aufsteigend), würden sich dann dementsprechend die anderen spalten mit verschieben? Also sind die Spalten (pro Zeile) immer mit einander "verbunden"?

2. Wenn es denn dann Sortiert ist kann man dann auch direkt ne ganze Zeile raus schreiben lassen oder muss ich jede Zelle einzeln auslesen (über Schleife zum Beispiel)

3. Die wohl wichtigste Frage ist wie funktioniert das Sortieren? Ich find zwar ne Menge aber das bezieht sich meist alles auf Excel und da wirkt es so als ob sie da Zellen sortieren (in nem Sheet) und die dann entnehmen das gibts ja bei mir net. Oder versteh ich das falsch.

Ok ich hoffe jemand kann mir folgen ^^'

MfG
Sascha

------------------
„Nicht Erfolg ist der Schlüssel zum Glück,
sondern Glück ist der Schlüssel zum Erfolg.
Wenn du gerne tust, was du tust, wirst du auch erfolgreich sein.“ ― Albert Schweitzer

[Diese Nachricht wurde von Booyaka am 17. Jan. 2019 editiert.]

[Diese Nachricht wurde von Booyaka am 17. Jan. 2019 editiert.]

[Diese Nachricht wurde von Booyaka am 17. Jan. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Booyaka
Mitglied



Sehen Sie sich das Profil von Booyaka an!   Senden Sie eine Private Message an Booyaka  Schreiben Sie einen Gästebucheintrag für Booyaka

Beiträge: 122
Registriert: 22.06.2012

CATIA V5 R19, 24, 26, 28, 29

erstellt am: 17. Jan. 2019 13:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Langsam steig ich durch ^^'
Anscheind funktioniert das so:

Code:

    First = LBound(oArr)
    Last = UBound(oArr)
    For k = First To Last - 1
        For kk = k + 1 To Last
            If oArr(0, k) > oArr(0, kk) Then
                'X1
                Temp = oArr(0, kk)
                oArr(0, kk) = oArr(0, k)
                oArr(0, k) = Temp
               
                'Y1
                Temp = oArr(1, kk)
                oArr(1, kk) = oArr(1, k)
                oArr(1, k) = Temp
               
                'Z1
                Temp = oArr(2, kk)
                oArr(2, kk) = oArr(2, k)
                oArr(2, k) = Temp
               
                'X2
                Temp = oArr(3, kk)
                oArr(3, kk) = oArr(3, k)
                oArr(3, k) = Temp
               
                'Y2
                Temp = oArr(4, kk)
                oArr(4, kk) = oArr(4, k)
                oArr(4, k) = Temp
               
                'Z2
                Temp = oArr(5, kk)
                oArr(5, kk) = oArr(5, k)
                oArr(5, k) = Temp
            End If
        Next kk
    Next k

Ich hab den Code mal Erweitert und es Funktioniert auch soweit nach mehrmaligem Kontrollieren immer noch kein fehler gefunden in dem Array.

Ich habe aber das Gefühl das das umständlich geschrieben ist. kann man das irgendwie vereinfachen? ^^'

------------------
„Nicht Erfolg ist der Schlüssel zum Glück,
sondern Glück ist der Schlüssel zum Erfolg.
Wenn du gerne tust, was du tust, wirst du auch erfolgreich sein.“ ― Albert Schweitzer

[Diese Nachricht wurde von Booyaka am 17. Jan. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 17. Jan. 2019 13:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Booyaka 10 Unities + Antwort hilfreich

Servus

Willst du jede Spalte für sich sortieren? Was für ein Sinn hat den das, dann geht doch die Zuordnung der Koordinaten pro Punkt verloren.
Verbesserungsvorschläge:
- Vergleich und Austausch in extra Funktion auslagern und pro Spalte diese dann aufrufen
- Array in 6 Arrays zerlegen, diese dann sortieren (Bubbelsort, Quicksort), Gesamtarray wieder zusammensetzen

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Booyaka
Mitglied



Sehen Sie sich das Profil von Booyaka an!   Senden Sie eine Private Message an Booyaka  Schreiben Sie einen Gästebucheintrag für Booyaka

Beiträge: 122
Registriert: 22.06.2012

CATIA V5 R19, 24, 26, 28, 29

erstellt am: 17. Jan. 2019 13:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Erstmal danke für die Infos,

Ich möchte natülich nicht jede Spalte einzeln sortieren, wie du schon sagst ich will das die zugehörigkeit der Koordinaten vorhanden bleibt.
Bsp:
Wenn ich den kleinsten Wert der Spalte 1 in Zeile 3 stehen hab und möchte das dieser in Zeile 1 rutscht (aufsteigend sortieren), dann soll dementsprechend der jeweilige Wert der 3. Zeile aus den Spalten 2-6 ebenfalls an in die erste Zeile gesetzt werden.

Deswegen dachte ich halt das ich wie beim 2. Post von mir beschrieben das wenn ich nach Spalte gucke welcher wert größer ist (If-Befehl) und dann dem entsprechen d die 1. Spalte sortire muss ich das selbe Sortieren ja nur auf die anderen Spalten übertragen um die Zugehörigkeiten bei zu behalten. Oder ist der Denkansatz falsch?

Zu deinen Verbesserungsvorschlägen:
das mit dem Vergleichen und Austauschen versteh ich nicht so ganz wie du das meinst? hab ich da nicht ebenfalls das Problem das die Zugehörigkeit mir flöten geht?
Wenn ich den Array in 6 einzelen zerlege habe ich doch auch keine zusammengehörigkeit der Spalten mehr oder?

Sorry für die blöden Fragen ^^'

------------------
„Nicht Erfolg ist der Schlüssel zum Glück,
sondern Glück ist der Schlüssel zum Erfolg.
Wenn du gerne tust, was du tust, wirst du auch erfolgreich sein.“ ― Albert Schweitzer

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 17. Jan. 2019 14:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Booyaka 10 Unities + Antwort hilfreich

Servus

Sorry, ich hab dein Code falsch interpretiert. Somit sind meine Vorschläge nicht zielführend.
Du könntest:
- dir bestehende Sortierfunktionen mal anschauen (zB hier)
- den Austausch der Elemente für die einzelnen Spalten auch mit einer Schleife abarbeiten (wäre dann auch unabhängig von der Spaltenzahl)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz