| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Datei finden (5334 mal gelesen)
|
Heiko76 Mitglied Applikationsingenieur
  
 Beiträge: 589 Registriert: 21.03.2002
|
erstellt am: 15. Mrz. 2006 10:41 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich komme nicht weiter. Ich habe eine Verzeichnisstruktur: Hauptverzeichniss AAA Darunter sind die Verzeichnisse 111 und 222 Unter dem Verzeichniss 222 gibt es die Verzeichnuse A1 A2 und A3 Irgendwo in den Verzeichnissen A1 A2 oder A3 gibt es eine Datei die Heißt A12345xx.dwg wobei xx kann sein xx oder eine Zahl zwischen 00 und 99. Wie finde ich jetzt diese Datei? Die Verzeichnisse sind bekannt, nur der Dateiname ist nicht ganz bekannt (wegen diesem xx, das ist der Änderungsindex der Zeichnung). ------------------ cu Heiko Schau mal rein www.mertens-bb.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 15. Mrz. 2006 14:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Heiko76
Hallo Heiko, so?
Code: Sub y() Dim s$ s = Dir("d:\*.dwg") While s <> "" If IsNumeric(Right(Split(s, ".")(0), 2)) Or _ Right(Split(s, ".")(0), 2) = "xx" Then Debug.Print s s = Dir Wend End Sub
Gruss NancyEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 2914 Registriert: 20.12.2000
|
erstellt am: 25. Mrz. 2006 12:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Heiko76
In VBscript kann man den Dateinamenvergleich beispielsweise auch so loesen: Code:
set folder=CreateObject("Scripting.FileSystemObject").GetFolder("c:\temp")Set regex=new RegExp regex.Pattern = "^[A-Za-z][0-9]{5}[0-9x][0-9x]\.dwg$" for each file in folder.Files if regex.Test(file.Name) Then WScript.Echo("Passende Datei gefunden: " & file.Path) End if next
Wenn ich Dich richtig verstanden habe, beginnt der Dateiname mit einem Buchstaben, danach folgen fuenf Ziffern, danach noch einmal zwei Stellen, die entweder eine Ziffer oder 'x' sind. Diese Annahme ist in 'regex.Pattern' festgehalten. Mit regulaeren Ausdruecken wie oben tut man sich etwas leichter, wenn sich die Dateinamenskonventionen mal aendern - dazu passt man nur das Suchmuster an und muss nicht ueber die richtige Kombination von Left/Right/Mid/Trim/wasauchimmer nachdenken. Der folgende Code erledigt auch noch gleich die rekursive Dateinamensuche mit:
Code:
startFolder="c:\temp"set folder=CreateObject("Scripting.FileSystemObject").GetFolder(startFolder) Sub recursiveSearch(dir, regex) for each file in dir.files if regex.Test(file.Name) Then WScript.Echo("Passende Datei gefunden: " & file.Path) End if next for each folder in dir.SubFolders recursiveSearch folder, regex next End Sub Set regex=new RegExp regex.Pattern = "^[A-Za-z][0-9]{5}[0-9x][0-9x]\.dwg$" recursiveSearch folder, regex
Claus ------------------ OneSpace Designer Modeling FAQ: http://www.clausbrod.de/Osdm/
[Diese Nachricht wurde von clausb am 25. Mrz. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 25. Mrz. 2006 13:07 <-- editieren / zitieren --> Unities abgeben:          Nur für Heiko76
Hi Klaus, > regex.Pattern = "^[A-Za-z][0-9]{5}[0-9x][0-9x]$" matched das in VBScript??? Bei mir geht nur sowas:
Code:
regex.Pattern = "^[A-Za-z][0-9]{5}(?:\d\d|xx)\.dwg$" 'oder regex.Pattern = "\w\d{5}(?:\d\d|xx)\.dwg"
Gruss Nancy -- ps: zB bei: A1234501.dwg 'Y A12345xx.dwg 'Y A1234599.dwg 'Y A12345zz.dwg 'N
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 2914 Registriert: 20.12.2000
|
erstellt am: 25. Mrz. 2006 14:06 <-- editieren / zitieren --> Unities abgeben:          Nur für Heiko76
Nancy, ich hatte in der ersten Version meines Postings die Dateinamensendung .dwg im Suchmuster vergessen (dann aber ganz schnell korrigiert, aber offenbar warst Du schneller ). Ansonsten funktioniert bei mir das Suchmuster ganz prima so. Deine Idee mit den Abkuerzungen fuer die Zeichenklassen ist sehr gut, allerdings bedeutet \w etwas anderes als [A-Za-z]. Zumindest bei mir passt \w auch auf Ziffern, und das waere in unserem Beispiel ja falsch. Aber dank Deiner Anregung komme ich nun also zu der folgenden verbesserten Version des Suchmusters: Code:
regex.Pattern = "^[A-Za-z]\d{5}[0-9x]{2}\.dwg$"
Claus
------------------ OneSpace Designer Modeling FAQ: http://www.clausbrod.de/Osdm/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 25. Mrz. 2006 14:27 <-- editieren / zitieren --> Unities abgeben:          Nur für Heiko76
Jo Claus, du hast recht, \w kann auch eine Ziffer sein, auweia das hab ich voll versemmelt;-) Also auch Dir Danke für den Hinweis, aber wo wir grade beim perfektionieren sind, noch was:
Code:
regex.Pattern = "^[A-Za-z]\d{5}[0-9x]{2}\.dwg$" => matched auch auf: A12345x0.dwg'deswegen Kombination aus deinem und meinem regex.Pattern = "[A-Za-z]\d{5}(?:\d\d|xx)\.dwg"
ich hoffe das müsste nun einigermaßen sicher sein. Achja was gibt es schöneres als so ne kleine RegExp-Übung an so nem verregneten Samstag ...  lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 2914 Registriert: 20.12.2000
|
erstellt am: 25. Mrz. 2006 17:49 <-- editieren / zitieren --> Unities abgeben:          Nur für Heiko76
Zitat: Original erstellt von startrek:
Code:
regex.Pattern = "[A-Za-z]\d{5}(?:\d\d|xx)\.dwg"
Stimmt - ich hatte die Aufgabenstellung nicht richtig gelesen. Deine Version ist ganz klar die bessere. Claus ------------------ OneSpace Designer Modeling FAQ: http://www.clausbrod.de/Osdm/
[Diese Nachricht wurde von clausb am 25. Mrz. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |