Autor
|
Thema: Vergleich von Parameter (1184 mal gelesen)
|
Sabine Feminin Mitglied Konstrukteur
Beiträge: 10 Registriert: 30.07.2006
|
erstellt am: 30. Jul. 2006 19:51 <-- editieren / zitieren --> Unities abgeben:
Hallo, bin noch nicht so fin in der Progrmmierung und benötige daher mal ein wenig hilfe. Mit dem unten stehenden Code soll verglichen werden, ob der Parameter schon vorhanden ist. Leider bekomme ich immer das gleiche Ergebnis egal ob er einen Parameter findet oder nicht. Kann mir jemand helfen? Dim Laenge, Abstand As Integer Dim Params As Parameters Dim r As Integer Dim i As Integer Namen = "Laenge:Abstand" Sp = Split(Namen, ":") For i = 0 To 0 If Params.Count < 0 Then found = 0 For v = 1 To Params.Count If Sp(i) = Params.Item(r).Name Then found = 1 Next End If If found = 0 Then MsgBox ("Parameter nicht vorhanden.") End If If found = 1 Then MsgBox ("Parameter bereits vorhanden.") End If Next Gruß, Sabine Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 30. Jul. 2006 23:22 <-- editieren / zitieren --> Unities abgeben: Nur für Sabine Feminin
Hallo Sabine, so ohne CATIA (also ohne Testmöglichkeit) sehe ich 4 Fehler. Einmal sollte die Schleife über alle Elemente von "Sp" gehen, weiter ist das "End If" an der falschen Stelle bzw. es fehlt ein "Else", dann sollte das "v" nach "For" sicher ein "r" sein und es fehlt ein "End If"! Somit müßte Dein Code so lauten:
Code: Dim Laenge, Abstand As Integer Dim Params As Parameters Dim r As Integer Dim i As Integer Namen = "Laenge:Abstand" Sp = Split(Namen, ":")For i = 0 To UBound(Split(Namen, ":")) If Params.Count = 0 Then found = 0 Else For r = 1 To Params.Count If Sp(i) = Params.Item(r).Name Then found = 1 End If Next End If If found = 0 Then MsgBox ("Parameter nicht vorhanden.") End If If found = 1 Then MsgBox ("Parameter bereits vorhanden.") End If Next
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 |
Sabine Feminin Mitglied Konstrukteur
Beiträge: 10 Registriert: 30.07.2006
|
erstellt am: 31. Jul. 2006 08:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Lusilnie, vielen Dank für die Antwort. Die Fehler die Du angesprochen hast konnte ich nachvollziehen. Leider gibt es immer noch ein Problem. Bei folgender Zeile bleibt er stehen: If Params.Count = 0 Then Gruss, Sabine
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sabine Feminin Mitglied Konstrukteur
Beiträge: 10 Registriert: 30.07.2006
|
erstellt am: 31. Jul. 2006 09:01 <-- editieren / zitieren --> Unities abgeben:
|
Sabine Feminin Mitglied Konstrukteur
Beiträge: 10 Registriert: 30.07.2006
|
erstellt am: 31. Jul. 2006 13:33 <-- editieren / zitieren --> Unities abgeben:
Ich bins nochmal, mit MsgBoxen funktioniert es, aber wenn ich statt der MsgBox("Parameter schon vorhanden.") ein Parameter erstellen lasse mit dem Namen "Laenge" bekomme ich immer wieder found=0 ????? Gurss, Sabine Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 01. Aug. 2006 03:34 <-- editieren / zitieren --> Unities abgeben: Nur für Sabine Feminin
Hallo Sabine Feminin, das Problem liegt sicher in der Parameter-Erzeugung. Bei mir funktioniert das z.B. so: Code: Sub CATMain() Dim Laenge As Double, Abstand As Double Dim Params As parameters Dim r As Integer Dim i As Integer Set Params = CATIA.ActiveDocument.Part.parameters Namen = "Laenge:Abstand" sp = Split(Namen, ":") For i = 0 To UBound(Split(Namen, ":")) If Params.Count = 0 Then found = 0 Else For r = 1 To Params.Count If sp(i) = Params.Item(r).Name Then found = 1 End If Next End If If found = 0 Then MsgBox "Parameter nicht vorhanden" Dim length As Dimension Set length = Params.CreateDimension("Laenge", "LENGTH", 100) length.Rename "Laenge" Dim distance As Dimension Set distance = Params.CreateDimension("Abstand", "LENGTH", 50) distance.Rename "Abstand" ElseIf found = 1 Then MsgBox "Parameter bereits vorhanden" End If Next End Sub
Wenn Dein Fall anders liegt, beschreibe ihn doch noch genauer! 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 |
Sabine Feminin Mitglied Konstrukteur
Beiträge: 10 Registriert: 30.07.2006
|
erstellt am: 01. Aug. 2006 14:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Lusilnie, nochmals Danke für Deine Mühe. Der Code funktioniert soweit ganz gut, bis auf das die Parameter zweimal erstellt werden. Nach dem Austausch von For i = 0 To UBound(Split(Namen, ":")) durch For i = 0 To 0 werden die Parameter nur einmal erzeugt. Trotzdem verstehe ich nicht warum die Parameter bei der Verwendung von "0 To UBound" zweimal erstellt werden. Kannst Du mir das erklären? Gruss, Sabine (Bin bis Sonntag im Urlaub) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 01. Aug. 2006 14:29 <-- editieren / zitieren --> Unities abgeben: Nur für Sabine Feminin
Vermutlich, weil in dem String Namen zwei Namen aufgeführt sind. Die Schleife wird also zweimal durchlaufen. Bei beiden Durchläufen werden vermutlich beide Namen nicht gefunden (ich nehme an, dass das daran liegt, dass Params nur einmal vor dem Schleifenlauf initialisiert wird und während des Schleifenlaufs auch trotz der CreateDimension-Aufrufe nicht aktualisiert wird...) Daher wird der Bereich if found = 0 then ... zweimal durchlaufen... Ersetze den Code
Code:
MsgBox "Parameter nicht vorhanden" Dim length As Dimension Set length = Params.CreateDimension("Laenge", "LENGTH", 100) length.Rename "Laenge" Dim distance As Dimension Set distance = Params.CreateDimension("Abstand", "LENGTH", 50) distance.Rename "Abstand"
doch testweise mal durch Code:
MsgBox "Parameter nicht vorhanden" Dim myParam As Dimension Set myParam = Params.CreateDimension(sp(i), "LENGTH", 100) myParam.Rename sp(i)
Dann sollte in jedem Schleifendurchlauf nur der tatsächlich fehlende Parameter erzeugt werden... ------------------ -- Danny Reinhold Reinhold Software Services [Diese Nachricht wurde von dr am 01. Aug. 2006 editiert.] [Diese Nachricht wurde von dr am 01. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |