Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Teile des Namens von z.B. GeoSet kopieren

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:  Teile des Namens von z.B. GeoSet kopieren (584 mal gelesen)
Beinschuss
Mitglied



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

Beiträge: 11
Registriert: 09.05.2016

Catia V5 R26

erstellt am: 25. Jan. 2019 12:19    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...

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


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: 25. Jan. 2019 12:31    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 Beinschuss 10 Unities + Antwort hilfreich

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



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

Beiträge: 11
Registriert: 09.05.2016

Catia V5 R26

erstellt am: 25. Jan. 2019 13:08    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

Zitat:
Original erstellt von bgrittmann:
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 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


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: 25. Jan. 2019 13:48    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 Beinschuss 10 Unities + Antwort hilfreich

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



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

Beiträge: 11
Registriert: 09.05.2016

Catia V5 R26

erstellt am: 25. Jan. 2019 15:29    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

Zitat:
Original erstellt von bgrittmann:
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


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



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

Beiträge: 11
Registriert: 09.05.2016

Catia V5 R26

erstellt am: 25. Jan. 2019 15:48    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

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


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: 25. Jan. 2019 16:38    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 Beinschuss 10 Unities + Antwort hilfreich

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


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: 27. Jan. 2019 12:47    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 Beinschuss 10 Unities + Antwort hilfreich

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



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

Beiträge: 11
Registriert: 09.05.2016

Catia V5 R26

erstellt am: 28. Jan. 2019 09:31    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

Zitat:
Original erstellt von bgrittmann:
Servus

Anstatt 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:
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



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 >>)

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