Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  right-Funktion bis zu einem Zeichen

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:  right-Funktion bis zu einem Zeichen (1782 mal gelesen)
AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 10. Sep. 2009 12:06    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.

Seit paar Tagen versuche ich mich der ganzen Materie anzunähern..
Sehr sehr holprig :/
Auf der Arbeit habe ich jedoch den Ziethen und Hansen..

Was ich jedoch jetzt nicht finden konnte, genausowenig wie im Netz:

Ist es möglich die right-Funktion auch bis zu einem bestimmten Zeichen auszuführen?

Beispielsweise:

Ordner = right(datei.Fullname , "\")

Funktionieren tut es leider nicht. Nur eben mit Zahlen.
Oder gibt es eine andere Möglichkeit, wenn ich z.B den Ordner von einer Datei herausbekommen möchte?

Und mit welchem Befehl könnte ich diesen Ordner dann nach einem bestimmten Dateityp durchsuchen?

Danke schon einmal
Gruß
Andreas

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

Thomas Harmening
Ehrenmitglied V.I.P. h.c.
Arbeiter ツ



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

Beiträge: 2897
Registriert: 06.07.2001

NX 10
Win 7

erstellt am: 10. Sep. 2009 12:32    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 AndreasNilli 10 Unities + Antwort hilfreich

müsste es nicht LEFT sein?

Code:
Sub CATMain()
Dateipfad = CATIA.ActiveDocument.FullName

Laufwerk = Left(Dateipfad, Instr(Dateipfad, "\"))
Dateipfad = Left(Dateipfad, Instrrev(Dateipfad, "\"))

MsgBox "Laufwerk:" & Laufwerk & Chr (13) & "Dateipfad:" & Dateipfad 

End Sub


¤dit... Link wegeworfen und Code platziert

[Diese Nachricht wurde von Thomas Harmening am 10. Sep. 2009 editiert.]

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Sep. 2009 12:33    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 AndreasNilli 10 Unities + Antwort hilfreich

Hallo,
dafür gibt es die Funktion mid

Syntax mid(string, Startpunkt, [Länge])

Beispiel:
string="1234567"
mid(string,3,3)=345

um zu ermitteln, nach wieviel Zeichen ein bestimmtes Zeichen kommt gibt es instr

Syntax instr(string, Suchstring)
Beispiel=
String="zuiwert"
instr(string, "w")=4

diese kann man auch miteinander kombinieren

Beispiel
String="Ich bin ein Text"
mid(string, instr(string, "b"), 7)="bin ein"

HTH

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

Axel.Strasser
Ehrenmitglied V.I.P. h.c.
Selbstständig im Bereich PLM/CAx



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

Beiträge: 4107
Registriert: 12.03.2001

erstellt am: 10. Sep. 2009 12:59    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 AndreasNilli 10 Unities + Antwort hilfreich

Im vbs mach ich es z.B. so:

Code:
Source_dir = WScript.ScriptFullName
Source_dir = left(Source_dir, inStrRev(Source_dir, "\"))


und noch etwas für ein rekursives Directory suchen:

Code:
strDirectories(0) = InputBox("Start_dir:", "Start Directory", Scriptpath)
If strDirectories(0) = "" Then Wscript.Quit

strDirectories(0) = fso.GetAbsolutePathName(strDirectories(0))
lngCounter = 0

Do Until lngCounter > Ubound(strDirectories,1)
'Next folder to process
Set fol = fso.GetFolder(strDirectories(lngCounter))
WshShell.popup "      " & strDirectories(lngCounter),1,"Fortschritt Directory Listing"
'Get each file in turn
Set fils = fol.Files
For Each fil In fils
owner = GetOwner(strDirectories(lngCounter) & "\" & fil.name)
fl.WriteLine strDirectories(lngCounter) & " " & fil.name & " " & _
fso.GetExtensionName(fil.name) & " " & fil.size & " " & fil.DateLastAccessed & " " & owner
Next
'Check for any sub folders and add them to the folder Array
Set fols = fol.SubFolders
For each fol in fols
If Lcase(fol.Name) <> "recycler" and  Lcase(fol.Name) <> "system volume information" Then
Redim Preserve strDirectories(Ubound(strDirectories,1) + 1)
strDirectories(Ubound(strDirectories,1)) = fol.Path
End If
Next
lngCounter = lngCounter + 1
Loop


Axel

------------------
Inoffizielle deutsche CATIA Hilfeseite  Netiquette von cad.de

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 10. Sep. 2009 13:10    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.

Erstmal danke für die raschen Antworten.
Ich denke, ich habe mich nicht deutlich genug ausgedrückt.

@Thomas:
Ich möchte den Dateinamen von rechts angehen.
Zur Erklärung:

\\OrdnerPfad\Dateiname.catproduct

Was ich möchte ist, dass ich nur den Ordnerpfad am Ende habe. Deswegen dachte ich mir, dass es am besten wäre von rechts dranzugehen bis eben zu dem ersten "\", sodass ich den Pfad auslesen und mit diesem weiterarbeiten kann.
Allerdings geht das auf diese Weise anscheinend nicht.

Die Funktion Dir(...) habe ich auch entdeckt, bloß dort muss ich einen Ordnerpfad angeben, um damit arbeiten zu können, den ich ja eigentlich herausbekommen möchte.


Und meine andere Frage:
Wäre es möglich einen bestimmten Ordner (per Verzeichnispfad) nach bestimmten Dateien (.cgr) abzufragen und mit diesen weiterarbeiten?
(Ziel des ganzen ist ein Ordner zu durchsuchen und bestimmte Dateitypen herauszulöschen)


edit:
Habe nun diesen Befehl gefunden

CurDir()

Der spuckt mir den Pfad aus. Problem 1 mal gelöst 

[Diese Nachricht wurde von AndreasNilli am 10. Sep. 2009 editiert.]

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Sep. 2009 13:40    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 AndreasNilli 10 Unities + Antwort hilfreich

Hallo,
dafür gibt es einfachste API´s

schau mal hier: http://www.vbarchiv.net/api/api_findfirstfile.html

Hier mal ein Beispiel...

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
    (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
   
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
    (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * 260
    cAlternate As String * 14
End Type

Private Sub Main()
   
    Dim i                As Long
    Dim j                As Long
    Dim ActPath    As String
    Dim ActExt      As String
    Dim ActFile      As String
    Dim FHandle    As Long
    Dim FData      As WIN32_FIND_DATA
   
    ActPath="C:\CATIACache\"
    ActExt = "*.cgr"
           
    FHandle = FindFirstFile(ActPath & ActExt, FData)
   
    Do
       
          If FData.dwFileAttributes <> vbDirectory And FHandle >= 0 Then
               
          ActFile = ActPath & Left$(FData.cFileName, InStr(FData.cFileName, vbNullChar) - 1) 'ermittelt den Datei inkl. Pfad namen
                       
          Kill ActFile 'löscht die Datei
                   
          End If
                       
    Loop While FindNextFile(FHandle, FData)

    Call FindClose(FHandle)
           

End Sub

Ob es direkt funktioniert, weis ich im Moment nicht, da ich das schnell zusammen kopiert und etwas abgeändert habe. Vom Prinzip her habe ich aber keinen Fehler finden können.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Sep. 2009 13:51    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 AndreasNilli 10 Unities + Antwort hilfreich

Sorry habe es eben aus schlechtem Gewissen heraus mal ausprobiert und musste leider feststellen, dass ich was vergessen habe   . So funktionierts direkt, wenn du den Pfad anpasst. Dabei würde alle *.cgr-Files in dem angegebenen Ordner gelöscht werden.

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
    (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
   
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
    (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long


Public Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * 260
    cAlternate As String * 14
End Type

Sub CATMain()
   
    Dim ActPath     As String
    Dim ActExt       As String
    Dim ActFile       As String
    Dim FHandle     As Long
    Dim FData       As WIN32_FIND_DATA
   
    ActPath = "C:\Cache\cgr\#3\TeamPDM\" 'Beispiel
    ActExt = "*.cgr"
           
    FHandle = FindFirstFile(ActPath & ActExt, FData)
   
    Do
       
           If FData.dwFileAttributes <> vbDirectory And FHandle >= 0 Then
               
           ActFile = ActPath & Left$(FData.cFileName, InStr(FData.cFileName, vbNullChar) - 1) 'ermittelt den Datei inkl. Pfad namen
                       
           Kill ActFile 'löscht die Datei
                   
           End If
                       
     Loop While FindNextFile(FHandle, FData)

End Sub


------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

[Diese Nachricht wurde von RSchulz am 10. Sep. 2009 editiert.]

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 10. Sep. 2009 14:10    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

Hey.

Wow, vielen Dank für den kompletten Code.
Da ich noch sehr am Anfang bin, verstehe ich daraus nicht allzuviel..

Ich habe jedoch noch was hinzugefügt, sodass es den aktuellen Pfad automatisch findet:
(Es soll ja im Prinzip so ablaufen, dass jem., der die BG offen hat, auf einen Button klickt und die CGR aus dem Ordner gelöscht wird)

Code:
Sub CATMain()

Set productDocument1 = CATIA.ActiveDocument

Dim S As String
S = CurDir() '<<<<<<<<<<<<<
   
    Dim ActPath    As String
    Dim ActExt      As String
    Dim ActFile      As String
    Dim FHandle    As Long
    Dim FData      As WIN32_FIND_DATA
   
    ActPath = S  '<<<<<<<<<<<
    ActExt = "*.cgr"
           
    FHandle = FindFirstFile(ActPath & ActExt, FData)


Der Rest überhalb der CATMain() und unterhalb der ActExt ist wie oben.
Leider löscht er mir die .cgr nun nicht raus.
Sicherlich muss ich noch etwas anderes hinzufügen, jedoch erschien mir das Hinzugefügte relativ logisch.
(Aber ist ja nicht das 1.Mal, dass mir etwas logisch erscheint und dann doch nicht funktioniert.)

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Sep. 2009 14: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 AndreasNilli 10 Unities + Antwort hilfreich

versuchs mal mit:

Sub CATMain()
Set productDocument1 = CATIA.ActiveDocument

Dim S As String
S = CurDir() '<<<<<<<<<<<<<
S = S & "\"
   
    Dim ActPath    As String
    Dim ActExt      As String
    Dim ActFile      As String
    Dim FHandle    As Long
    Dim FData      As WIN32_FIND_DATA
   
    ActPath = S  '<<<<<<<<<<<
    ActExt = "*.cgr"
           
    FHandle = FindFirstFile(ActPath & ActExt, FData

Curdir gibt dir nur den Pfad, dann fehlt dir jedoch noch ein Trennzeichen (\) für die Datei 

BTW kannst du mit F8 taste schrittweise durch den Code gehen und wenn du mit der Maus über eine Variable kommst, wird dir der Inhalt angezeigt. So siehst du auch, ob das Programm durch die Schleife läuft.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 10. Sep. 2009 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

Ja das erscheint mir nun auch mal logisch  jedoch klappt es immernoch nicht.

Ich habe das mal einzeln durchlaufen und er erkennt den Befehl bei ActFile nicht.
Wenn ich in die Kill ActFile-Zeile springe, hat ActFile nur den Wert von S. Danach springt er zurück und hört auf, also wiederholt die Schleife nicht.

Leider kann ich mir (um es zu programmieren) / dir (um die Fehler bei mir zu erklären) nicht so gut weiterhelfen, da ich mich damit, wie schon gesagt, nicht so gut auskenne.

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Sep. 2009 14:45    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 AndreasNilli 10 Unities + Antwort hilfreich

Also bei mir sieht es so aus und funktioniert.

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
    (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
   
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
    (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long


Public Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * 260
    cAlternate As String * 14
End Type

Sub CATMain()
   
    Dim i                As Long
    Dim j                As Long
    Dim ActPath    As String
    Dim ActExt      As String
    Dim ActFile      As String
    Dim FHandle    As Long
    Dim FData      As WIN32_FIND_DATA
    Dim s As String
   
    s = CATIA.ActiveDocument.Path
   
    ActPath = s & "\"
    ActExt = "*.cgr"
           
    FHandle = FindFirstFile(ActPath & ActExt, FData)
   
    Do
       
          If FData.dwFileAttributes <> vbDirectory And FHandle >= 0 Then
               
          ActFile = ActPath & Left$(FData.cFileName, InStr(FData.cFileName, vbNullChar) - 1) 'ermittelt den Datei inkl. Pfad namen
                       
          Kill ActFile 'löscht die Datei
                   
          End If
                       
    Loop While FindNextFile(FHandle, FData)

End Sub

Die CurDir liefert mit C:\Windows\System32 zurück. Daher würde ich mich auf diese nicht verlassen. CATIA.ActiveDocument.Path sollte aber auf das von dir gewünschte hinaus laufen.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 10. Sep. 2009 15:13    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

Das geht ja ruckzuck hier.


Also ich habe deinen Code nun mal 1zu1 reinkopiert.
Bei mir will er nicht, jedoch kann es auch sein, dass das an diesem Rechner liegt, da es schon paar Sachen gab, die hier nciht funktioniert haben.

Was ich allerdings nicht verstehe, was diese ersten Zig-Zeilen überhaupt bedeuten.

Ich dachte da eher an etwas, was einfach aussieht. *g*
Ich weiß auch nicht.. Du wirst vermutlich schmunzeln, aber nunja 

Am Ende des Beispiels weiß ich nicht wirklich, wie ich mich in Codeform ausdrücken kann, deswegen habe ich nochmal dahinter geschrieben, was ich gemeint habe. (Wobei so etwas wie SelFile wohl nur in CATIA dann geht und nicht auf Windows-Ebene oder?

Code:
Sub CATMain()

Set productDocument1 = CATIA.ActiveDocument

    Dim Path As String
    Dim ActPath As String
    Dim ActExt As String
    Dim ActFile As String
    Dim S As String
   
    Path = CATIA.ActiveDocument.Path
    ActPath = Path & "\"
    ActExt = "*.cgr"
 
    If File = ActPath & "*" & ActExt Then    'Suche nach Dateien, die auf .cgr enden und wähle diese aus
                                              '"*" ist als Platzhalter gedacht..

        Kill File

    End If

End Sub


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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 10. Sep. 2009 16: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 AndreasNilli 10 Unities + Antwort hilfreich

Du willst prüfen, ob überhaupt dateien in diesem Ordner sind?

Im endeffekt macht das schon das findfile...

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
    (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
   
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
    (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

Das sind deklarationen. Dabei werden Funktionen von anderen Programmen oder Windows zur Verfügung in die Programmstruktur eingebunden.

Public Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * 260
    cAlternate As String * 14
End Type

Das sind Userdefinierte Datentypen, die wir für die vorher deklarierten Funktionen benötigen.

Zum Thema einfach aussehen... Programmierung ist nunmal kein Zuckerschlecken  Wenn ich dir dass Programm zeige, aus dem ich das raus geholt habe, wirst du warscheinlich mit den Ohren schlackern  Naja ein 1000-Zeiler ist eigentlich relativ schnell zusammen und dann ist die .exe gerade mal 100kb oder so groß. Windows ist aktuell in der Win7-Version 8-9GByte groß, da weist du was die zu tun haben.

zu deinem Code zurück... Sag doch einfach in einer art Ablaufplan was du machen möchtest.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 11. Sep. 2009 07:33    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.

Danke erstmal für die Geduld.
Mit den Ohren schlackern könnte ich sogar, wenn notwendig 


Ein Ablaufplan dachte ich mir folgendermaßen:


- den Verzeichnisordner (Path) vom aktuellen Produkt auslesen.
- in diesem Ordner wird nach dem Dateientyp "*.cgr" gesucht, ausgewählt und anschließend gelöscht.

Das war es eigentlich auch schon 


Meine bisherigen Makros waren bisher mit der search.-Funktion innerhalb CATIA, sodass Parts o.Ä. auszuwählen für mich relativ einfach war.
Wie ich auf diese Sachen extern in Windows suche, weiß ich leider noch nicht.

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 11. Sep. 2009 08:03    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 AndreasNilli 10 Unities + Antwort hilfreich

Möchtest du manuell aussuchen? Das wird dann nämlich schon etwas mehr werden.

ansonsten wäre es schon so wie ich es geschrieben habe. Du hast zwischendurch mal erwähnt, dass es bei dir so nicht laufen würde.? Was läuft denn nicht bzw. wo steigt er denn aus. Vll. fehlt dir lediglich die VBA-Umgebung.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 11. Sep. 2009 08:32    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

Nein, sollte schon automatisiert ablaufen.

Hmm. Habe gerade den Code an einem anderen Rechner ausprobiert. Dort funktioniert es.
Irgendwie lustig mein Rechner hier.. War jetzt nicht das 1.Mal, dass er total rumspinnt.
Ich muss auch, wenn ich Schritte mit dem Recorder aufnehme, nach jedem Mal neustarten, da er mir ab dem 2.Mal "recorden" nichts mehr aufnimmt.

Nunja. Dann muss ich mal unsere EDV-Futzis fragen 
Vielen Dank dir auf jeden Fall.

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 14. Sep. 2009 08:03    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.

Irgendwie ging mir die Sache nicht aus dem Kopf und so habe ich mich mal drangesetzt, es nicht mit dem win-basierenden Code (sofern ich das richtig verstanden habe?) löschen zu wollen.

Hier ist mein Vorschlag

Code:
Sub CATMain()
Set productDocument1 = CATIA.ActiveDocument

    Dim Path As String
    Dim ActPath As String
    Dim ActExt As String

    Path = CATIA.ActiveDocument.Path
    ActPath = Path & "\"
    ActExt = "*.cgr"
   
    Dim TempName As String
    TempName = Dir$(ActPath & "*.cgr")
   
    While Len(Dir(ActPath & TempName)) > 0
   
            'MsgBox TempName
            Kill ActPath & TempName
            TempName = Dir$(ActPath & "*.cgr")
           
    Wend

End Sub



Klappt soweit auch ganz gut, jedoch bringt der Kompiler mir beim letzten Durchlauf der Schleife einen Fehler, da ich innerhalb der Schleife Tempname neu benennen will, aber keine CGR im Ordner mehr vorhanden ist.

Dann dachte ich mir, dass ich eben eine kurze if-Anweisung anbaue

Code:
[...]
    While Len(Dir(ActPath & TempName)) > 0
   
            'MsgBox TempName
            Kill ActPath & TempName
           
            If Len(Dir$(ActPath & "*.cgr")) > 0 Then
            TempName = Dir$(ActPath & "*.cgr")
            Else: MsgBox "Fertig!"
           
    Wend
[...]


Jedoch geht das in VB nicht, da er mir dauernd bringt, dass ein "Wend ohne While" vorhanden ist.

Sofern ich die Neubenennung von Tempname außerhalb der Schleife durchführen wollte, tat er mir nicht das, was er sollte, deshalb kam ich auf diesen Code.

Wisst ihr einen Lösungsvorschlag?

[Diese Nachricht wurde von AndreasNilli am 14. Sep. 2009 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: 14. Sep. 2009 08: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 AndreasNilli 10 Unities + Antwort hilfreich

Servus
Kannst du es nicht einfach direkt machen? zB
Code:
Set Datei = CATIA.ActiveDocument
Ordner =Datei.Path

EDIT: Hat sich scheinbar erledigt. Ich hab nur den Anfang des Themas gelesen.

Gruß
Bernd

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

[Diese Nachricht wurde von bgrittmann am 14. Sep. 2009 editiert.]

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 14. Sep. 2009 08: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 Nur für AndreasNilli 10 Unities + Antwort hilfreich

Hallo,
versuch es mal damit.

Sub CATMain()

    Dim Path As String
    Dim ActPath As String
    Dim ActExt As String
    Dim TempName As String
   
    Path = CATIA.ActiveDocument.Path
    ActPath = Path & "\"
    ActExt = "*.cgr"
   
    While Dir$(ActPath & "*.cgr") <> "" '<> steht für ungleich und "" steht für leer
    'Mache solange das dir-Ergebnis ungleich leer ist
   
            'MsgBox TempName
            TempName = Dir$(ActPath & "*.cgr")
            Kill ActPath & TempName
               
    Wend

End Sub

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

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

AndreasNilli
Mitglied
MaschBau, 6.Sem


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

Beiträge: 22
Registriert: 09.09.2009

erstellt am: 14. Sep. 2009 09: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

Guten Morgen.

Vielen Dank, Rick.
Inzwischen bin ich vom Prinzip her auch auf etwas Ähnliches gekommen.

Grüße

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