Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Inhalt einer Selektion über eine Schleife hinaus behalten

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:  Inhalt einer Selektion über eine Schleife hinaus behalten (1199 mal gelesen)
ashneel
Mitglied



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

Beiträge: 21
Registriert: 08.10.2012

HP Z420
Intel Xeon E5-1620
Quadro K2000
16GB RAM
Win7 x64
CATIA V5 R19

erstellt am: 09. Mrz. 2015 16: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

Hallo zusammen,

ich habe das Problem, dass die selection "all" nachdem die Schleife erfolgreich durchlaufen wurde, keine Elemente mehr enthält. Solange sich das Macro in der Schleife befindet füllt sich die selection "all" wie gewünscht.
Wie verhindere ich, dass die selection nachdem die Schleife durchlaufen wurde ihren Inhalt vergisst.

hier der entsprechende Auszug:

dim dummy
dim all as selection
set all = drawingDocument1.Selection
all.clear

for k = 0 to 9
for l = 0 to 9
searchstring = "CATDrwSearch.DrwText.TextString="&star&Eingabe&Cstr(l)&star&"),sel"
call search.add(drawingsheet1)
search.search searchstring
for m =1 to search.count
set dummy = search.item(m).value
all.add dummy
next
next
next

Msgbox "all: " + Cstr(all.count)

Danke und Gruß

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: 09. Mrz. 2015 17:55    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 ashneel 10 Unities + Antwort hilfreich

Servus
Was hast du mit dem Code genau vor?
Es gibt nur eine Selektion in einem Dokument. Somit musst du, wenn du die Selektion/Suche mehrfach ansprechen willst, den Inhalt der Sektion zwischenspeichern (array, Collection, ..)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 09. Mrz. 2015 18:20    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 ashneel 10 Unities + Antwort hilfreich

'---------- Bernd war wieder schneller -------------

Hallo ashneel,

es sieht für mich so aus, als würdest Du eine Selection mit einer anderen befüllen wollen.
Die Zeilen

Code:

searchstring = "CATDrwSearch.DrwText.TextString="&star&Eingabe&Cstr(l)&star&"),sel"
call search.add(drawingsheet1)
search.search searchstring


sagen
- 1) entweder hast Du den Suchstring falsch abgeschrieben oder das Makro ist nie fehlerlos gelaufen
- 2) 'search' wird von Catia als Selektion verstanden

Anschliessend weist Du der Selection 'all' die Values(Namen?) der Items von 'Search' zu.

Probier mal (ungetestet):

Code:

Dim oSel as Selection
Dim n as integer
Dim strSearch as string

set oSel = Catia.ActiveDocument.Selection
oSel.clear
strSearch = " ... was auch immer ...,sel"
oSel.Search strSearch

for n = 1 to oSel.count
  MsgBox oSel.item(n).value
next


Hope it helps,
Joe

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

ashneel
Mitglied



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

Beiträge: 21
Registriert: 08.10.2012

HP Z420
Intel Xeon E5-1620
Quadro K2000
16GB RAM
Win7 x64
CATIA V5 R19

erstellt am: 10. Mrz. 2015 08:21    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

Guten Morgen,

Vielen Dank für eure Antworten.
Geplant ist mit dem Code auf dem aktiven Sheet einer Zeichnung die Anzahl der Positionsnummern automatisch zählen zu lassen. Heißt, der Nutzer gibt die Positionsnummer ein und das System spuckt die Anzahl aus. Problem des Ganzen ist, dass oft mehrere Positionsnummern in einem Textfeld mit Komma getrennt oder untereinander zusammengefasst werden. Das führt dazu, dass eine Suche nach beispielsweise der Positionsnummer 2 auch nur das Textfeld, in dem die 2 alleine steht, findet. Suche ich nach *2* wird auch eine 324 oder alles was die 2 enthält mitgezählt.
Zählen und aufaddieren funktionierte im Prinzip fehlerfrei, d.h. der Suchstring ist bis grundsätzlich korrekt.
Nur habe ich da die Problematik, dass Dinge doppelt gefunden werden und somit die Anzahl nicht stimmt.
Die Schleife ist nur ein Auszug aus dem Gesamten. Sie geht im Prinzip alle Zahlen von 0 bis 9 vor der gewünschten Zahl durch und erlaubt ein beliebiges Zeichen nach der Zahl und speichert die gefundenen Objekte in die selection „all“.
Das Suchkriterium wird später angepasst und dient nur zur Funktionsprüfung der Schleife und der selection.

Mein Plan war über die selection (hier die selection „all“) doppelte Erfassungen zu vermeiden. Meinem Verständnis nach wird nichts einer Selektion hinzugefügt, was bereits in ihr enthalten ist.
Nur „vergisst“ die selection „all“ nachdem das Makro die Schleife verlässt ihren Inhalt.

Das mit dem Array bzw. der collection klingt nach einer Lösung. Überprüft eine dieser Dinge, ob ein Objekt bereits enthalten ist oder fügt es dieses noch einmal hinzu?
Die Anzahl der darin enthaltenen Objekte lässt sich ähnlich einfach wie die Anzahl der Objekte einer Selektion bestimmen, nehme ich an.

Grüße

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: 11. Mrz. 2015 11:21    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 ashneel 10 Unities + Antwort hilfreich

Servus
Könntest du nicht deinen Suchstring entsprechend anpassen, dass alle vier Fälle für die Positionsnummer erfasst werden:
- Positionsnummer allein: Eingabe
- Positionsnummer vorne: Eingabe & ", "
- Positionsnummer in der Mitte: ", " & Eingabe & ", "
- Positionsnummer am Ende: ", " & Eingabe

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

ashneel
Mitglied



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

Beiträge: 21
Registriert: 08.10.2012

HP Z420
Intel Xeon E5-1620
Quadro K2000
16GB RAM
Win7 x64
CATIA V5 R19

erstellt am: 11. Mrz. 2015 14: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

Hallo Bernd,

das war mein erster Gedanke und Versuch. Funktioniert auch für die Konstellationen allein, vorne, in der Mitte und am Ende.
Allerdings machen mir da die untereinander geschriebenen Positionsnummern einen Strich durch die Rechnung. Einzelne Positionsnummern werden nur erfasst, wenn sie wirklich alleine stehen und kein Zeilenumbruch vorhanden ist; der Zeilenumbruch lässt sich jedoch nicht erfassen. Ich habe alle kombinationen aus Chr(10) und Chr(13) ausprobiert (10 allein, 13 allein, 10 + 13, 13 + 10).
Der Suchstring wird zwar mit Zeilenumbruch erstellt, aber die Suche endet mit negativem Ergebnis.
Nur mit dem * als Zeichenersatz werden auch die Positionsnummernblöcke mit Zeilenumbrüchen erfasst. Blöderweise auch alles andere.

Gruß

[Diese Nachricht wurde von ashneel am 11. Mrz. 2015 editiert.]

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 11. Mrz. 2015 15:00    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 ashneel 10 Unities + Antwort hilfreich

PMFJI

Hallo ashneel,

wie sieht der String aus den Du untersuchen willst? Genau bitte!

Wonach willst Du suchen? Oder was willst Du damit anstellen?

Tschau,
Joe

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

ashneel
Mitglied



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

Beiträge: 21
Registriert: 08.10.2012

HP Z420
Intel Xeon E5-1620
Quadro K2000
16GB RAM
Win7 x64
CATIA V5 R19

erstellt am: 11. Mrz. 2015 16:36    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


string.JPG

 
Hallo Joe,

kein Problem. Anbei ein Bild, wie der String aussehen kann.

Gesucht wird die Anzahl der Positionsnummer 2
Auftrag an das Makro: Frage den User nach der zu suchenden Positionsnummer. Suche die gewünschte Positionsnummer (hier: 2) und gebe die korrekte Anzahl in einer MsgBox wieder.
Die richtige Anzahl wäre hier 2.

Gruß
ashneel

[Diese Nachricht wurde von ashneel am 11. Mrz. 2015 editiert.]

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 11. Mrz. 2015 21:26    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 ashneel 10 Unities + Antwort hilfreich

Hallo ashneel,

der Zeilenumbruch erfolgt durch chr$(10) oder vbLf.

Zu prüfen mit:

Code:

set drTxts = drView.Texts

instr(drTxts.Item(1).Text,vblf)



wobei drView das Object der jeweiligen View ist, also

set drView = Catia.ActiveDocument.Sheets.Activesheet.views.item(x).

Den Text zerhackst in Zeilen mit 'Split', also

Code:

  Dim strText As String
  Dim arrStr() As String
  Dim n As Integer
 
  strText = "Just a Test" & vbLf & "to demonstrate" & vbLf & "the split function"
  Debug.Print strText
  arrStr = Split(strText, vbLf)
 
  For n = 0 To UBound(arrStr)
      Debug.Print arrStr(n)
  Next


Die einzelnen Array-Elemente aus arStr() vergleichst mit strPosNr, wobei strPosNr die PositionsNummer sein soll:

Code:

dim strPosNr as string

if arrStr = strPosNr then MsgBox "Got one!"


Was Du jetzt also brauchst ist eine Schleife,
- die durch alle Sheets geht
- die durch alle Views geht
- die durch alle View-Texte geht und diese zersplittet
- die alle split-elemente mit '2' vergleicht.

Um Buch zu führen wirst auch noch einen globalen Zähler brauchen,
den Du bei Auffinden einer Position erhöhst.

Hope it helps,
Joe

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

ashneel
Mitglied



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

Beiträge: 21
Registriert: 08.10.2012

HP Z420
Intel Xeon E5-1620
Quadro K2000
16GB RAM
Win7 x64
CATIA V5 R19

erstellt am: 12. Mrz. 2015 11:27    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 Joe,

habe es dank deinen Tipps und, da ich in CATScript schreibe, kleineren Anpassungen hinbekommen, die mit Zeilenumbruch getrennten Positionsnummern zu erfassen! 

Code:

Dim strText as CATBstr
Dim arrStr
Dim n, m, counter As Integer
counter = 0

searchstring = "CATDrwSearch.DrwText.TextString="&star&Eingabe&star&",sel"
call search.add(drawingsheet1)
search.Search searchstring
if search.count <> 0 then
For n = 1 to search.count
strtext = Cstr(search.item(n).value.text)
arrStr = split(strText, vblf)
For m = 0 to UBound(arrStr)
if arrStr(m) = Cstr(Eingabe) then
counter = counter + 1
end if
next
next
end if


In Verbindung mit den anderen Routinen kommt das Macro jetzt auf die korrekte Anzahl.

Vielen Dank nochmal und schöne Grüße
ashneel

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