| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | Erfolgreich unterwegs mit der KISTERS 3DViewStation, ein Whitepaper
|
Autor
|
Thema: Welchen Datentyp verwendet ihr? (1426 mal gelesen)
|
INLU Mitglied Konstrukteur Automotive

 Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 23. Okt. 2010 13:26 <-- editieren / zitieren --> Unities abgeben:         
Hallo! Ich habe eine Frage zur Verwendung von Datentypen. Ich habe mir ein Makro geschrieben, um aus Catia heraus eine Stückliste zu erzeugen. Hierfür verwende ich arrays. Das heißt, ich scanne meine Baumstruktur und lege die Dokumenteigenschaften (In meinem Falle userproberties mit eingetragenen Werten) in ein array z.b.: aMaterial(i) = aktivesdokument(i).eigenschaft.material aHersteller(i) = aktivesdokument(i).eigenschaft.hersteller usw..... So habe ich für jedes Dokument und jede Eigenschaft ein array, in die ich meine Einträge schreibe. Das Funktioniert auch ganz gut, aber es ist schwer, eine nachträgliche Sortierung durchzuführen. Ich möchte das Makro jetzt in VB.net umsetzen, und wollt euch fragen, wie ihr die Informationen speichern würdet, um sie im nachhinein noch zu manipulieren, also z.b. Sortierung und Löschung. Ich bin gespannt auf eure Vorschläge! mfg Lars
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Okt. 2010 13:39 <-- editieren / zitieren --> Unities abgeben:          Nur für INLU
Servus Du könntest dir eine Collection erstellen (ist eigentlich ein mehrdimensionales Array mit Zusatzfunktionen). Diese Collection könntest du noch mit einer Sortierung ergänzen zB siehe hierGruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive

 Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 23. Okt. 2010 14:41 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd, erst einmal Danke für deine Antwort! ich habe mir das gerade mal im VBA angeschaut. Das scheint schon einfacher zu sein als die arrays, aber wenn ich ein Item verschieben will, müsste ich das mit allen collections gleichzeitig machen, damit ich nicht die Zugehörigkeit der Elemente verliere. Ich hatte da eher an so eine Art Tabelle gedacht, in der man ganze Zeilen verschieben kann. Gibt es so etwas? mfg Lars Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
 
 Beiträge: 175 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 23. Okt. 2010 14:44 <-- editieren / zitieren --> Unities abgeben:          Nur für INLU
Hallo Lars, ich habe das bis jetzt auch immer mit einem mehrdimensionalen Array gemacht und dieses dann sortiert. Ist aber immer bissl aufwendig. Ich bin zwar nicht der Hirsch in .Net aber dort gibts glaube ich eine automatische ArraySortier-funktion. (war auch mal bitter nötig ) In VB6 oder VBA habe ich das so gemacht. (Habs aus einen größeren Project rauskopiert hoffe du überschaust das wichtigste, die Array´s waren da global Dimensioniert.) Code: Function STLSort()Dim i As Integer Dim c As Integer Dim m As Integer mStart.TraceNow ("3. STLSort: start...") 'Schleife über alle Positionen For i = 0 To mStart.iSTL - 2 'Schleife über alle Positionen For c = i To mStart.iSTL - 2 If IsNumeric(mStart.ArrSTL(1, i)) And IsNumeric(mStart.ArrSTL(1, c)) Then If CInt(mStart.ArrSTL(1, i)) > CInt(mStart.ArrSTL(1, c)) Then SwapIt i, c c = 0 i = 0 Exit For ElseIf CInt(mStart.ArrSTL(1, i)) = CInt(mStart.ArrSTL(1, c)) Then If IsNumeric(mStart.ArrSTL(0, i)) And IsNumeric(mStart.ArrSTL(0, c)) Then If CInt(mStart.ArrSTL(0, i)) > CInt(mStart.ArrSTL(0, c)) Then SwapIt i, c c = 0 i = 0 Exit For End If End If End If End If Next 'Prozentanzeige If i > m Then mStart.TraceNow ("3. STLSort: start..." & Int((((100 / (mStart.iSTL - 2)) * m))) & "%") m = i End If Next mStart.Trace ("3. STLSort: end...") End Function Function SwapIt(i As Integer, c As Integer) Dim iC As Integer Dim iZ As Integer Dim ArrTemp() Dim AnzTemp As Integer Dim ProdTemp As String iZ = UBound(mStart.ArrParLR) ReDim ArrTemp(iZ) 'Temp Dateien merken For iC = 0 To UBound(mStart.ArrParLR) ArrTemp(iC) = mStart.ArrSTL(iC, i) Next AnzTemp = mStart.ArrANZ(i) ProdTemp = mStart.ArrPRO(i) 'Dateien Hin Schreiben For iC = 0 To UBound(mStart.ArrParLR) mStart.ArrSTL(iC, i) = mStart.ArrSTL(iC, c) Next mStart.ArrANZ(i) = mStart.ArrANZ(c) mStart.ArrPRO(i) = mStart.ArrPRO(c) 'Dateien Her Schreiben For iC = 0 To UBound(mStart.ArrParLR) mStart.ArrSTL(iC, c) = ArrTemp(iC) Next mStart.ArrANZ(c) = AnzTemp mStart.ArrPRO(c) = ProdTemp End Function
Achso: Hier werden Baugruppennummer und Positionionsnummer getrennt behandelt und vorangestellte Nullen habe ich zuvor entfernt ("001" --> "1") mfG Mario Edit: Falls du die Werte in Excel schreibst lässt sich das dort am einfachsten sortieren. (Ist halt ein wenig unpro... ) [Diese Nachricht wurde von roccat am 23. Okt. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
 
 Beiträge: 175 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 23. Okt. 2010 14:57 <-- editieren / zitieren --> Unities abgeben:          Nur für INLU
Also ich habs grad mal nachgeschaut, in net ist´s wirklich ein kinderspiel arrays zu sortieren. Code: Dim x As Integer Dim names(3) As String names(0) = "Howard, Ryan" names(1) = "Allen, Ray" names(2) = "Pujols, Albert" names(3) = "Iverson, Allen" For x = 0 To (names.Length - 1) Console.WriteLine(CStr(x) + ". " + names(x).ToString()) Next x Array.Sort(names) For x = 0 To (names.Length - 1) Console.WriteLine(CStr(x) + ". " + names(x).ToString()) Next x
mfG Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive

 Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 23. Okt. 2010 15:46 <-- editieren / zitieren --> Unities abgeben:         
Hallo roccat, Danke für deine Antwort. Ich möchte aber auch die Möglichkeit haben, einzelne Elemente zu verschieben. Da scheint mir die Lösung mit der Collection doch recht passend zu sein. Ich habe mir den verlinkten Workshop von Bernd jetzt mal durchgelesen. etwas aufwendiger aber anscheinen gut. Hat jemand soetwas schon mit einer Collection umgesetzt. Ist ein verschieben der Datensätzte ohne das komplette Neuschreiben der Selbigen möglich? mfg Lars Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
 
 Beiträge: 175 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 23. Okt. 2010 19:58 <-- editieren / zitieren --> Unities abgeben:          Nur für INLU
Hallo Lars, hier mal die Unterschiede zwischen Array und Collection. Für das Sortieren wirst du wohl noch eine zusätzliche Funktion schreiben müssen. Für das tauschen würde ich auch eine Funktion schreiben mit 2x Add an bestimmter Stelle (ist im Link beschrieben) und dann 2x Remove sollte aber relative übersichtlich bleiben. mfG Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P-Star Mitglied Konstrukteur
 Beiträge: 4 Registriert: 23.09.2010
|
erstellt am: 29. Okt. 2010 09:00 <-- editieren / zitieren --> Unities abgeben:          Nur für INLU
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |