Autor
|
Thema: Teile des Namens von z.B. GeoSet kopieren (584 mal gelesen)
|
Beinschuss Mitglied
Beiträge: 11 Registriert: 09.05.2016 Catia V5 R26
|
erstellt am: 25. Jan. 2019 12:19 <-- editieren / zitieren --> Unities abgeben:
Hallo... Obwohl ich mit Hilfe dieses Forums ganz langsam mein Makro-Verständiss ausbauen kann, bin ich mal wieder an einem Punkt an dem ich nicht weiter komme. Das gewünschte Ergebnis ist eigentlich ziemlich simpel. Ich muss derzeit immer wieder und ziemlich häufig Teile von Namen von verschiedenen Geometrischen-Sets (oder manchmal auch Produkten) kopieren und andere Sets dementsprechend benennen. Dabei handelt es sich immer um den Text for dem dritten Unterstrich. Hier ein Beispiel: XXX_000_YY_BENENNUNG Aus der Zeile (meiner aktivien Selektion) möchte ich jetzt XXX_000_YY kopieren. Bei Excel habe ich so etwas ähnliches schon mal mit einem Makro gelöst, in dem ich die Stelle des dritten Unterstrichs ermittelt und dann die Stellen davor ausgegeben habe. Mit CatScript bekomme ich das so aber irgendwie nicht hin. Da die gewünschten Textpassagen immer 10 oder 11 Zeichen haben, würde mir alternativ auch ein Einauswahlfenster reichen, bei dem ich wählen kann ob ich die ersten 10 oder 11 Zeichen der aktiven Selektion kopieren möchte. Die erste Variante ist allerdings schon eleganter ;-)
Liebe Grüße [Diese Nachricht wurde von Beinschuss am 25. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Jan. 2019 12:31 <-- editieren / zitieren --> Unities abgeben: Nur für Beinschuss
Servus Du könntest mit InStrRev den letzten Unterstrich suchen und die Zeichen davor auslesen. Du könntest mit Split den String in einen Array auftrennen und aus den ersten drei Elementen des Array deinen Teilstring zusammensetzen. Du könntest das 11. Zeichen auswerten, wenn es sich um einen _ handelt die ersten 10 Zeichen nutzen, sonst die ersten 11 Zeichen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beinschuss Mitglied
Beiträge: 11 Registriert: 09.05.2016 Catia V5 R26
|
erstellt am: 25. Jan. 2019 13:08 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusDu könntest mit InStrRev den letzten Unterstrich suchen und die Zeichen davor auslesen. Du könntest mit Split den String in einen Array auftrennen und aus den ersten drei Elementen des Array deinen Teilstring zusammensetzen. Du könntest das 9. Zeichen auswerten, wenn es sich um einen _ handelt die ersten 8. Zeichen nutzen, sonst die ersten 9. Zeichen Gruß Bernd
Danke für die schnelle Nachricht. Hat mir alleine schon dahingehend geholfen, dass ich die Seite vbachiv nicht kannte und sie auf den ersten Blick extrem hilfreich für mich ist. Ich habe die Stellen im Ursprungspost leider falsch gennant. Es sind 10 oder 11 (nicht 8 oder 9). Dein erster Tipp mit InStrRev funktioniert bei mir zwar leider nicht, weil in dem Text dahinter (BENENNUNG im Beispiel) auch Unterstriche möglich sind. Ich kannte den Befehl InStr allerdings bisher nicht und dank des Start-Werts lässt es sich damit sehr gut lösen. Entweder kann ich wie bei meinem Excel-Makro vorgehen und den Befehl einfach dreimal nacheinander ablaufen lassen, wobei jeweils das Ergebniss (+1) des vorherrigen als Startwert genutzt wird. Oder ich suche einfach ab Stelle 9, da ich weiß dass der zweite Unterstrich immer an Stelle 8 ist. Den dritten Tipp mit der Auswertung der Stelle finde ich auch gut, ich werde aber erstmal den oben genannten verfolgen. Ich bin mir jetzt noch nicht ganz sicher, wie ich das dann kopiere. Den neuen String erzeuge ich mit "Left" und der ermittelten Anzahl. Dann einfach .copy ? [Diese Nachricht wurde von Beinschuss am 25. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Jan. 2019 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für Beinschuss
Servus Warum copy? Du kannst doch den Teilstring in einer Variable zwischenspeichern und dann an einer anderen Stelle im Code zum benennen/umbenennen verwenden. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beinschuss Mitglied
Beiträge: 11 Registriert: 09.05.2016 Catia V5 R26
|
erstellt am: 25. Jan. 2019 15:29 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusWarum copy? Du kannst doch den Teilstring in einer Variable zwischenspeichern und dann an einer anderen Stelle im Code zum benennen/umbenennen verwenden. Gruß Bernd
Im Grunde hast du natürlich recht. Zum Umbennen nutze ich schon ein anderes Makro und im Grunde könnte ich die Ermittlung des Textes dort einfach vorsetzen. Da ich das Kopieren der Zeichen auch bei etwas anderem Nutzen kann und das Umbenennen ebenfalls auch noch bei etwas ganz anderem Nutze, würde ich die beide Schritte gerne getrennt lassen und nur den ermittelten Namen in die Zwischenablage kopieren. Ist das mit einfachen Mitteln möglich ? Ich habe dazu das gefunden: https://ww3.cad.de/foren/ubb/Forum137/HTML/004717.shtml Wirklich glücklich werde ich damit aber nicht... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beinschuss Mitglied
Beiträge: 11 Registriert: 09.05.2016 Catia V5 R26
|
erstellt am: 25. Jan. 2019 15:48 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Beinschuss:
Im Grunde hast du natürlich recht. Zum Umbennen nutze ich schon ein anderes Makro und im Grunde könnte ich die Ermittlung des Textes dort einfach vorsetzen. Da ich das Kopieren der Zeichen auch bei etwas anderem Nutzen kann und das Umbenennen ebenfalls auch noch bei etwas ganz anderem Nutze, würde ich die beide Schritte gerne getrennt lassen und nur den ermittelten Namen in die Zwischenablage kopieren. Ist das mit einfachen Mitteln möglich ? Ich habe dazu das gefunden: https://ww3.cad.de/foren/ubb/Forum137/HTML/004717.shtml Wirklich glücklich werde ich damit aber nicht...
Ich habe es jetzt selber hin bekommen... Danke Bernd für das Schubsen in die richtige Richtung (10U) Mich würde es aber auch interessieren ob man es eleganter hätte lösen können. Also hier erstmal der Code... und über weitere Anmerkungen würde ich mich freuen. Sub CATMain ()
Dim CATProdDoc 'As ProductDocument Copy_to_Clipboard() End Sub Sub Copy_to_Clipboard() 'Hier Beginnt der Code zur Ermittlung des Strings Dim productDocument1 As PartDocument Set productDocument1 = CATIA.ActiveDocument Dim selection1 As selection Set selection1 = CATIA.ActiveDocument.Selection
Dim StrName As String StrName = selection1.Item(1).Value.Name Dim StrSuchzeichen As String StrSuchzeichen = "_" Dim IntPos1 As Integer IntPos1 = InStr(1, StrName, StrSuchzeichen, 1)+1 Dim IntPos2 As Integer IntPos2 = InStr(IntPos1, StrName, StrSuchzeichen, 1)+1 Dim IntPos3 As Integer IntPos3 = InStr(IntPos2, StrName, StrSuchzeichen, 1)-1 Dim StrErgebnis As String StrErgebnis = Left(selection1.Item(1).Value.Name, IntPos3)
'Hier endet der Code zur Ermittlung des Strings
Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("clip")
Set oWrite = oExec.stdIn oWrite.WriteLine StrErgebnis oWrite.Close End Sub Lg Beini
[Diese Nachricht wurde von Beinschuss am 25. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Jan. 2019 16:38 <-- editieren / zitieren --> Unities abgeben: Nur für Beinschuss
Servus Anstatt per Zwischenablage könntest den String auch in einer globalen Variable oder per Parameterübergabe an eine Funktion/Routine weitergeben. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Jan. 2019 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Beinschuss
Servus Hier ein Vorschlag wie man das Separieren des Präfix (universell) auslagern könnte: Code: Sub CATMain()MsgBox GetPrefixOfString("AA_BB_CC_DD","_",3) MsgBox GetPrefixOfString("AA_BB_CC_DD","_",8) MsgBox GetPrefixOfString("AA_BB_CC_DD","_",2) MsgBox GetPrefixOfString("AA_BB_CC_DD",";",3) End Sub Function GetPrefixOfString(sInput as String, sSeperator as String, Count as Integer) as String 'Gets the prefix of a sting based on an defined separator. 'Returns an empty sting if separator is not found. 'Returns complete input sting if amount of separators are not found. dim sArray as String if InStr(sInput,sSeperator) = 0 then GetPrefixOfString = "" exit Function end if sArray = Split(sInput, sSeperator) if UBound(sArray) >= Count then ReDim Preserve sArray(Count - 1) GetPrefixOfString = Join(sArray,sSeperator) exit Function end if GetPrefixOfString = sInput End Function
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beinschuss Mitglied
Beiträge: 11 Registriert: 09.05.2016 Catia V5 R26
|
erstellt am: 28. Jan. 2019 09:31 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusAnstatt per Zwischenablage könntest den String auch in einer globalen Variable oder per Parameterübergabe an eine Funktion/Routine weitergeben. Gruß Bernd
Das kannte ich bisher nicht :( Ich habe das mal ein wenig recherchiert und bin dabei wieder mal auf einen schönen Link gestoßen (Einführung VBA) Wenn ich heute oder morgen ein wenig Zeit finde, werde ich mal gucken ob ich meine versch. Makros damit vereinen kann. Danke
Zitat: Original erstellt von bgrittmann: ServusHier ein Vorschlag wie man das Separieren des Präfix (universell) auslagern könnte: Code: Sub CATMain()MsgBox GetPrefixOfString("AA_BB_CC_DD","_",3) MsgBox GetPrefixOfString("AA_BB_CC_DD","_",8) MsgBox GetPrefixOfString("AA_BB_CC_DD","_",2) MsgBox GetPrefixOfString("AA_BB_CC_DD",";",3) End Sub Function GetPrefixOfString(sInput as String, sSeperator as String, Count as Integer) as String 'Gets the prefix of a sting based on an defined separator. 'Returns an empty sting if separator is not found. 'Returns complete input sting if amount of separators are not found. dim sArray as String if InStr(sInput,sSeperator) = 0 then GetPrefixOfString = "" exit Function end if sArray = Split(sInput, sSeperator) if UBound(sArray) >= Count then ReDim Preserve sArray(Count - 1) GetPrefixOfString = Join(sArray,sSeperator) exit Function end if GetPrefixOfString = sInput End Function
Gruß Bernd
Der Code übersteigt mein Wissen leider deutlich. Sobald ich mal ein bisschen mehr Zeit habe, werde ich mich damit in aller Ruhe beschäftigen. Wobei dann der Link oben vielleicht erstmal die bessere Lektüre wäre
Nochmals danke und Lg Beini Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|