Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  CATIA V5 Programmierung
  Array Problem

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
  
CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48
  
KISTERS 3DViewStation - Der Schlüssel zur Einsparung von CAD-Lizenzen, eine Pressemitteilung
Autor Thema:  Array Problem (2402 mal gelesen)
Sven2010
Mitglied



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

Beiträge: 56
Registriert: 20.04.2010

V5R19SP3
Hotfix 50

erstellt am: 07. Sep. 2010 11:16    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

Hallo Leute,

ich habe mal wieder (wie so oft :-) ein kleines problemchen und hoffe auf eure Hilfe.

In meinen Drawing splitte ich einen Parameter folgendermaßen:
VAR_TABLE = Split((parameters1.Item("VARIANT_CODE").Value)," ")

Mit den Werten des sich daraus ergebenden Arrays erzeuge ich Views (als ViewName benutze ich die Werte des Arrays):
For i = 0 to UBound(VAR_TABLE)
n = VAR_TABLE(i)
Set oView = oSheet.Views.Item("V" + n)
If err.number <> 0 Then
Set oView = oSheet.Views.Add("V" + n)

Darin erzeuge ich dann Tabellen, fülle diese etc. etc.

Mein Problem:
Sobald alles angeschlossen ist (Views erzeugt und gefüllt) möchte ich das aktive Detail Sheet nach allen darauf befindlichen Views durchsuchen und alle Views löschen, deren ViewName keinem der Array Werte identisch ist.
Sprich ich möchte den Namen jeder View mit ALLEN Werten des vorliegenden Arrays vergleichen; entspricht der Name KEINEM Array Wert möchte ich die View löschen.

Habe schon alles versucht mit verschiedenen Schleifen, aber diese "überschlagen" sich immer irgendwo. Ich komme nicht darauf, wie ich den Namen mit allen Array Werten vergleichen kann um daraus die Entscheidung Löschen Ja / Nein abzuleiten.

Hat jemand einen Lösungsansatz?

Danke und Gruß
Sven

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

roccat
Mitglied
Konstrukteur


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

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: 07. Sep. 2010 12:16    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 Sven2010 10 Unities + Antwort hilfreich

Hallo Sven,

ich schätze mal du hast bei dir die Views innerhalb deiner Schleife löschen wollen. Das ist auch ok aber deine Schleife ignoriert die gelöschten Views und läuft über die vorhandene Item-Anzahl darüber hinaus.

Versuch mal die Schleife vom größten Item bis zum kleinsten Item zudurchlaufen siehe Bsp.:


Dim MyArray(2)

Dim i          As Integer
Dim c          As Integer

Dim MyDrawing  As DrawingDocument
Dim MySheet    As DrawingSheet
Dim MyView      As DrawingView
Dim MyViews    As DrawingViews

'Aktive View holen
Set MyDrawing = CATIA.ActiveDocument
Set MySheet = MyDrawing.Sheets.ActiveSheet
Set MyViews = MySheet.Views

'Dummy Array fuellen
MyArray(0) = "VIEW1"
MyArray(1) = "VIEW2"
MyArray(2) = "VIEW3"

'Views scannen
For c = MyViews.Count To 1 Step -1
    Set MyView = MyViews.Item(c)
    For i = 0 To UBound(MyArray)
        If MyView.Name = MyArray(i) Then
            MyViews.Remove c
            Exit For
        End If
    Next
Next

End Sub

mfG
Mario

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

Sven2010
Mitglied



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

Beiträge: 56
Registriert: 20.04.2010

V5R19SP3
Hotfix 50

erstellt am: 07. Sep. 2010 12:54    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

Hi Mario,

mein Problem ist, dass ich die Views dann löschen möchte, wenn sie keinem der Array werte entsprechen!!!

Beispiel:

View1: 00
View2: 01
View3: 02

Array-Werte:
Array(0) = 00
Array(1) = 01

Heisst in diesem Fall möchte ich nicht die Views 1 + 2 löschen (das wäre mit deinem Code möglich), sondern die View 3 (da kein Array Wert = 02 ist).
Es bedeutet eben ich muss den Viewname erst mit allen Array Werten vergleichen bevor ich die Entscheidung treffen kann die View zu löschen oder nicht.
Und das scheint mir über eine Schleife nicht möglich (da ich in der Schleife immer nacheinander mit jedem einzelnen Array Wert vergleiche und in der Schleife somit noch keine Entscheidung zum Löschen treffen kann, sondern erst später..)

Gruß
Sven

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

roccat
Mitglied
Konstrukteur


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

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: 07. Sep. 2010 13:12    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 Sven2010 10 Unities + Antwort hilfreich

Ok,
Sorry jetzt hab ich´s begriffen 
Ist aber auch kein Problem

Sub CATMain()

Dim MyArray(2)

Dim i          As Integer
Dim c          As Integer

Dim MyDrawing  As DrawingDocument
Dim MySheet    As DrawingSheet
Dim MyView      As DrawingView
Dim MyViews    As DrawingViews
Dim IsInArray  As Boolean

'Aktive View holen
Set MyDrawing = CATIA.ActiveDocument
Set MySheet = MyDrawing.Sheets.ActiveSheet
Set MyViews = MySheet.Views

'Dymmy Array fuellen
MyArray(0) = "VIEW1"
MyArray(1) = "VIEW2"
MyArray(2) = "VIEW3"

'Views scannen
For c = MyViews.Count To 1 Step -1
    IsInArray = False
    Set MyView = MyViews.Item(c)
    For i = 0 To UBound(MyArray)
        If MyView.Name = MyArray(i) Then
            IsInArray = True
        End If
    Next
    If IsInArray = False Then
        MyViews.Remove c
    End If
Next

End Sub

mfG
Mario

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

Sven2010
Mitglied



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

Beiträge: 56
Registriert: 20.04.2010

V5R19SP3
Hotfix 50

erstellt am: 07. Sep. 2010 14:18    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

Wow, das ging ja flott :-)

Mein Code sieht nun so aus:

For i = oSheet.Views.Count to 1 Step -1
IsInArray = False
Set oView = oSheet.Views.Item(i)
For m = 0 to VAR_TABLE_MAX
If oView.Name = ("V" + VAR_TABLE(m)) Then
IsInArray = True
End If
Next
If oView.Name <> "Variant_table_header" Then
If IsInArray = False Then
oSheet.Views.Remove (i)
End If
End If
IsInArray = False
Next

VAR_TABLE_MAX ist mein Array UBound.
Läuft ganz gut, bis auf ein Problem:
Ich muss eine View namens "Variant_table_header" (wird weiter oben im Script erzeugt) aus der Lösch-Aktion ausschliessen.
Diese wird mit dem Code auch nicht gelöscht, jedoch ist sie im Strukturbaum der Zeichnung nicht mehr zu finden. D.h. auf dem Detail Sheet gibt es die View noch, im Baum wird sie aber gelöscht... sehr seltsam so was habe ich noch nie zuvor gesehen.
Irgendeine Idee an was das liegen könnte???

Danke und Gruß
Sven

PS: 10 Unities sind auf dem Weg zu dir!!!

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

roccat
Mitglied
Konstrukteur


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

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: 07. Sep. 2010 14:44    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 Sven2010 10 Unities + Antwort hilfreich

mmmh, sowas ist mir noch nicht aufgefallen.
Ich kann das auch so schlecht nachprüfen sollte aber mit deiner
Ausschlußzeile

If oView.Name <> "Variant_table_header" Then

auch kein Problem mehr sein, oder?

mfG
Mario

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

Sven2010
Mitglied



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

Beiträge: 56
Registriert: 20.04.2010

V5R19SP3
Hotfix 50

erstellt am: 07. Sep. 2010 16:17    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


catscript_drawing.zip

 
Leider doch :-(
Trotz dieser Zeile wird die View im Baum der zeichnung gelöscht, obwohl sie noch vorhanden ist auf der Detail Sheet.

Hab mal mein komplettes Script inkl. Testdaten (R19) angehängt.
Wenn Zeit hast könntest das CatScript mal bei dir ausführen und mir sagen was passiert.
Sorry für das chaotische Script, muss ich wenn ich Zeit hab mal strukturieren.

Danke und Gruß
Sven

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 07. Sep. 2010 19:22    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 Sven2010 10 Unities + Antwort hilfreich

Hallo Sven,

als generelles Konzept könnte ich es vorstellen, dass du die Sache doch mit deiner Schleife machst, aber einen weiteren Array oder Collection anlegst. In diesen sammelst du dann die Views, die du löschen möchtest.
Dann brauchst du nur eine weitere (einfache) Schleife, um dann den Inhalt dieser Array zu löschen.
Es kann sein, dass dein anderer Skript nicht funktioniert, da deine Schleifen bei den Views von 0, bzw. 1 anfangen (wie üblich) und du zwischenzeitlich schon so viele Views gelöscht hast, dass der Item mit den aktuellen Zählerwert gar nicht mehr existiert.
Ein anderer Ansatz hier könnte sein, dass du bei der Schleife von hinten anfängst und rückwärts zählst.

Gruß,
Zoltan

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 07. Sep. 2010 23:43    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 Sven2010 10 Unities + Antwort hilfreich

Hallo Sven2010,

versuch doch mal diese Variante:

Code:
Set oViews = oSheet.Views
For i = oViews.Count to 1 Step -1
    IsInArray = False
    Set oView = oViews.Item(i)
    If oView.Name <> "Variant_table_header" Then
        For m = 0 to VAR_TABLE_MAX
            If oView.Name = ("V" & VAR_TABLE(m)) Then
                IsInArray = True
                Exit For
            End If
        Next
        If IsInArray = False Then
            oViews.Remove (i)
        End If
    End If
Next

Eventuell kannst Du auch noch
Code:
oViews.Remove (i)
durch
Code:
oViews.Remove oView.Name
austauschen, wenn die View-Namen (Detail-Namen) einmalig sind.


[Edit]
Vielleicht solltest Du auch in Deinem Script die Deklaration der Sprache als erste Zeile einfügen. Das hilft schon mal bei Problemen, z.B. mit Arrays...:

Code:
Language = "VBSCRIPT"
Sub CATMain()

[/Edit]


mfg,
Lusilnie


------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

[Diese Nachricht wurde von Lusilnie am 07. Sep. 2010 editiert.]

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

Sven2010
Mitglied



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

Beiträge: 56
Registriert: 20.04.2010

V5R19SP3
Hotfix 50

erstellt am: 08. Sep. 2010 09:37    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

Hi Lusilnie,

leider hat diese Variante auch nicht zum gewünschten Ergebnis geführt!

Folgender Code läuft nun einwandfrei:

If oView.Name <> "Variant_table_header" and oView.Name <> "Main View" and oView.Name <> "Background View" Then...

Ich musste neben der nicht zu löschenden View "Variant_table_header" ausserdem noch die "Views" Vordergrund(1) und Hintergrund(2) ausschliessen.
Scheinbat hat Catia etwas mit diesen Systemviews durcheinander gebracht als sie nicht explizit ausgeschlossen waren und normale Views im Strukturbaum gelöscht... Scripts können schon ungewöhnliche Dinge anrichten 

Danke an alle für eure Hilfe
Gruß
Sven

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

roccat
Mitglied
Konstrukteur


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

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: 08. Sep. 2010 10:39    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 Sven2010 10 Unities + Antwort hilfreich

Hallo Sven,

also ich hab mal deine Struktur angeschaut.
Die besagte View war wie du schon sagst im Hintergrund noch vorhanden aber nicht im Baum.

Ist wohl bei der Programmierung irgendwie (keine Ahnung wie ) nur halb gelöscht wurden. Ich habe diese dann nochmal mit nen Script gelöscht und dann funktioniert dein Makro nach meinen dafür halten. Das ausklammern der Background und Main View ist auf jeden Fall kein Fehler, beim löschen von allen Views hab ich das auch immer so gemacht.

Hast da ja ganz schön was zusammengebastelt...

mfG
Mario

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

Sven2010
Mitglied



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

Beiträge: 56
Registriert: 20.04.2010

V5R19SP3
Hotfix 50

erstellt am: 08. Sep. 2010 10:58    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

Hi du,

ja, ist über die vergangenen Wochen einiges zusammen gekommen bei meinem Title Block Macro (eines von 9 neuen Macros); deshalb auch die chaotische Struktur     

Aber tut jetzt alles was es soll 

Danke und nochmal Gruß an alle
Sven

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 08. Sep. 2010 18:11    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 Sven2010 10 Unities + Antwort hilfreich

Hallo Sven2010,

sorry, das mit den 2 Standard-Views (Main & Background) hatte ich nicht mit bedacht. Da aber die Main-View immer ".Item(1)" und die Background-View immer ".Item(2)" sind, kannst Du dies auch einfacher machen:

Code:
For i = oViews.Count to 3 Step -1


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

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)2025 CAD.de | Impressum | Datenschutz