Invité ingoenius Posté(e) le 7 mai 2007 Posté(e) le 7 mai 2007 salut, dans l'ecriture d'un scirpt je prevois de generer des images jpg , juste la ca va , maintenant j'ai quelque probleme de gestion de noms e versions de ces ci le cas pratique j'e travaille sur le fichier c:\test.dwg du quell je genere le fichier jpgc:\test_ver_1.jpg je voudrais que avant la generation du jpg on puisse lire dans le repertoire 'c:' dans ce cas pour voir s'il existe deja ce jpg, et s'il existe renommer le nom du jpg a faire avec la commande jpgout en incrementant de 1 le numero de version dans ce cas j'aurai a la fin la creationde c:\test_ver_2.jpg et ainsi de suite les problemes sont: lire dans le repertoire pur voir s'il existe le jpg avec le nom indipendammebnt du num ero de _ver_ et decides si cree le fichier avec _ver_1 ou si incrementer de 1 la _ver_
Bred Posté(e) le 7 mai 2007 Posté(e) le 7 mai 2007 Salut,rapidement, à approfondir : (setq x 2) (if (findfile "c:\\test_ver_1.jpg")) (while (not (findfile (strcat "c:\\test_ver_" (rtos x) ".jpg"))) (setq x (+ x 1)))) [Edité le 7/5/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Invité ingoenius Posté(e) le 7 mai 2007 Posté(e) le 7 mai 2007 merci pour l'aide,....mais, 1 en lancant la routine me retourne error if incomplet 2 si par exemple j'a deja travaillee sur ce plan et j'ai dejà generé des jpg par ex je suis arrive a la _ver_12.jpg comme peut le script s'apercevoir de l'existence si le test if cherche seulement 'lexistence de _ver_1? en fait le dessin dwg il s'appele normalement sans _ver_ a la fin, et la mention _ver_ avec le nymero de version est rajouté seulement sur les sorties jpg donc comme c'est possible de voir l'existrence du ou des fichiers, qui ont le meme nom du dessin, mais qui ont en plus un mentionde _ver_ avec un numero??et determiner le nouveau nom a partir du numero plus grand trouvé incrementé de 1? merci encore ;-)
BIM G CO Posté(e) le 7 mai 2007 Posté(e) le 7 mai 2007 (setq x 2.0) (if (findfile "c:\\test_ver_1.jpg") (while (not (findfile (strcat "c:\\test_ver_" (rtos x 2 0) ".jpg")) ) (setq x (+ x 1.0)) ) ) une parenthèse mal placé mais autrement l'incrémentation parait fonctionner [Edité le 7/5/2007 par Maximilien] Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
Bred Posté(e) le 7 mai 2007 Posté(e) le 7 mai 2007 une parenthèse mal placéoups ! désolé de la perte de temps ... Avec nom du fichier : (setq name (strcat "c:\\"(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg")) (setq x 2) (if (findfile name) (while (not (findfile (strcat "c:\\"(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg"))) (setq x (+ x 1)))) Et si tu veux rajouter ton fichier non pas sous c mais dans le répertoire ou le plan est enregistré, il faut remplacer "c:\\" par (getvar "DWGPREFIX") ... comme peut le script s'apercevoir de l'existence si le test if cherche seulement 'lexistence de _ver_1? findifile retourne nil si pas de fichier, ou T si fichier, donc :(if (findfile name)... demande si le fichier version 1 existe ou pas,si il n'exite pas il donne T, donc donne le nom version1, par contre, si il existe, il passe par "while" en recherchant à chaque fois le nom du fichier à l'incrémentant de 1 jusqu'à ce que "While" soit non-T (while (not (findfile (.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Invité ingoenius Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 j'arrive toujours pas a faire marcher, dans le test que je fais il existe le fichier _ver_1 et aussi le _ver_2masi le script me donne comme nouveau nome _ver_2 donc il ecraserait l'exisstant, au lieu dans ce cas de passe a _ver_3 il doit y avoir je cois une autre boucle qui teste touts le numero de file pour l'existence ou pas ici le bout de code qui devrai generer les noms de fichiers (defun c:Jpg2 () (setq nome (getvar "dwgname")) ;name and extension file (setq lung (strlen (getvar "dwgname"))) (setq lung2 ( + lung 5)) (setq nome (substr (getvar "dwgname") 1 (- lung 4)));name file (setq nomeT "test_ver_2.jpg");serve solo per il test (setq lungT (strlen nomeT)) (setq nome2 (strcat nome "_ver_" (rtos 1)".jpg")) (setq nome3 "Bodyshop_NP_041007_0307_14_ver_2.jpg") (setq Cdossier (getvar "dwgprefix"));current folder file (setq Sdossier "H:\\Hotels & Convention Centers\\BS Base Audiovisuel\\PLANS_EVENTS_JPG\\");perso (setq nomeSX (strcat nome "_ver_")) (setq fileSX (strcat Cdossier nomeSX)) (setq Scompleto (strcat Sdossier nome2));string name file jpg (setq Ccompleto (strcat Cdossier nome2));rimettere poi nome2 (setq file (findfile Ccompleto));questo testa l'esistenza o meno dil file ;(setq Pos (Instr 1 Ccompleto "_ver_")) (setq N 0) (repeat 10 (if (= "_" leggi) (setq leggi (substr Ccompleto deb 1)) ;legge il n carattere delle stringa a partire dalla fine per un carattere (progn (setq lungC (strlen Ccompleto)) (setq deb (- lungC N));numero di carattere dove c'é l'ultimo trattino (setq leggi (substr Ccompleto deb 1)) ;legge il n carattere delle stringa a partire dalla fine per un carattere (setq N (+ 1 N)) ) ) );alla fine di questo N é il numero di carattere della stringa partendo da destra dove si trova "_" (setq name (strcat Cdossier (vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg")) (setq x 2) (if (findfile name) (while (not (findfile (strcat Cdossier (vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg"))) (setq x (+ x 1)))) ) ici le bout de code quie devrai generer les jpg (if file (progn (setq ESISTE "esiste") ;esiste e rimanda la stringa (setq lf (-(strlen file) 4 )) (setq f (substr file lf)) ;numero piu' ext (setq f1 (-(strlen f) 4 )) ;di quanti caratteri é il numero (setq numPLAN (substr f f1 f1)) ;numero plan come stringa (setq NP (+ 1 (atof numPLAN))) ;aggiungo uno e creo nuovo numero (setq NPS (rtos NP)) ;rimetto come stringa (setq nomefile (strcat Cdossier nome "_ver_" NPS ".jpg")) (command "_zoom" "ET" "") (command "jpgout" nomefile "") );fine progn (progn (setq ESISTE "non esiste");non esiste e ritorna nil (setq nomefile Ccompleto) (command "_zoom" "ET" "") (command "jpgout" nomefile "") ) la aussi il manque quelque chose, car actuellement il travaille sur la seule presentation active, mais moi je voudrait qui prende des jpg pour chaque presentation du dessin ouvert
Invité ingoenius Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 en fait il faudrait dire que jusq'a quand name n'existe pas il faut augmenter le numero pour choisir le bon ala finde la boucle (setq num 1) (setq name (findfile (strcat Cdossier (vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos num)".jpg")));
Bred Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 Re,une grosse erreur dans la routine : un "not" pas malin... (setq name (strcat "c:\\"(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg")) (setq x 2) (if (findfile name) (while (findfile (strcat "c:\\"(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (setq x (+ x 1)))) pour tester le principe, j'ai mis un test_vers_1.txt et test_vers_2.txt sous c: et j'ai lancé ça :(defun c:test (/ NAME X) (setq name "c:\\test_vers_1.txt" x 2) (if (findfile name) (while (findfile (setq name (strcat "c:\\test_vers_"(rtos x)".txt"))) (setq x (+ x 1)) ) ) name ) ... donc pour la récupération du nom de fichier etc.... tu récupères les explications précédentes. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 SalutPourquoi utiliser une boucle ? Un exemple pour *.txt dans le répertoire de windows(last (vl-sort (vl-directory-files "c:/windows" "*.txt" 1) '<))ou(car (vl-sort (vl-directory-files "c:/windows" "*.txt" 1) '>)) ps : peut aussi fonctionner avec un "Un_jpeg_Ver_*.jpg" @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Invité ingoenius Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 il dois y avoir ancore quelque probleme, car le test est de voir si le nom de fichier avec " _ver_1.jpg " existe apres s'il existe voir s'il existe la _ver_2 3 etc......jusqu'a la derniere version existente ,ensuite donner le nouveau noma avec la derniere versine existente + 1 sinon cree simplement la _ver_1.jpg pour l'instant ca fonctionne pas ancore peut etre cela ca fonctionne : (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg"));vois s'il existe (setq x 1) (if (findfile name) (while (findfile (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (progn (setq x (+ x 1))) (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) );fin du progn s'il existe (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg"));s'il existe pas ) [Edité le 9/5/2007 par ingoenius]
Bred Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 Ben moi ça fonctionne....Pour info, l'exemple de Patrick_35 te ressort le nom du fichier avec l'indice le plus grand(last (vl-sort (vl-directory-files "c:\\" "*.jpg" 1) '<))Donc, si tu le récupères, tu n'a qu'à l'incrémenter de +1 et ça marche. POur ma boucle, elle fonctionne chez moi... En détail sur ton dernier post :le test est de voir si le nom de fichier avec " _ver_1.jpg " existec'est :(if (findfile name)..... s'il existe la réponse au if=T voir s'il existe la _ver_2 3 etc......jusqu'a la derniere version existente c'est ça :(while (findfile (setq name (strcat "c:\\monimage_ver_"(rtos x)".jpg"))) (setq x (+ x 1)) ) sinon cree simplement la _ver_1.jpg c'est la réponse nil au if ... La mème chose en créant un fichier (vide) sous c: pour être + concret :(test le plusieurs fois et regarde sous C !!!!)(defun c:test (/ NAME X F) (setq name "c:\\monimage_ver_1.jpg" x 2) (if (findfile name) (while (findfile (setq name (strcat "c:\\monimage_ver_"(rtos x)".jpg"))) (setq x (+ x 1)) ) ) (setq f (open name "W")) (close f) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 ??? ça bug toujours vu ce message ??? :casstet: :o Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
BIM G CO Posté(e) le 10 mai 2007 Posté(e) le 10 mai 2007 On reste dans l'expectative, cher Bred!! :P Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
Invité ingoenius Posté(e) le 16 mai 2007 Posté(e) le 16 mai 2007 j'ai l'impression d'avoir un erreur quelque part en fait au moment de controler si le jpg existe, il rentre dans un boucle infinie??? et il faut l'arreter avec eschap vous avez l'idee pour la correction ;----CREA UN JPG NEL DOSSIER CORRENTE DELLA PRESENTAZIONE ATTIVA e UNA COPIA DEL DOSSIER Plan Events --------------------- (defun c:Jpg () (setq x nil) (setq nome (getvar "dwgname")) ;name and extension file (setq Cdossier (getvar "dwgprefix")) ;current folder file (setq Sdossier "H:\\Hotels & Convention Centers\\BS Base Audiovisuel\\PLANS_EVENTS_JPG\\") ;backup folder (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg"));vois s'il existe (setq x 1) (if (findfile name) (while (findfile (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (progn (setq x (+ x 1))) (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (setq name2 (strcat Sdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (command "_zoom" "ET" "") (command "jpgout" name "");crea la jpg nel dossier corrente ;(command "jpgout" name2 "");crea la jpg di backup );fine progn se existe (progn (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg")) ;s'il existe pas (setq name2 (strcat Sdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg")) ;s'il existe pas (command "_zoom" "ET" "") (command "jpgout" name "") ;crea la jpg nel dossier corrente ;(command "jpgout" name2 "") ;crea la jpg di backup nel dossier events plans );fine progen se non esiste ) );end defun
Bred Posté(e) le 16 mai 2007 Posté(e) le 16 mai 2007 j'ai l'impression d'avoir un erreur quelque part... on a un peu l'impression de t'aider dans le vent franchement .... Ton code corriger, revu, simplifier : (defun c:Jpg (/ CDOSSIER NAME SDOSSIER X) (setq Cdossier (getvar "dwgprefix") Sdossier "H:\\Hotels & Convention Centers\\BS Base Audiovisuel\\PLANS_EVENTS_JPG\\" name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg")) (setq x 1) (if (findfile name) (while (findfile (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (setq x (+ x 1)) ) ) (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (command "_zoom" "ET" "") (command "jpgout" name "") (vl-file-copy (findfile name) (strcat Sdossier (vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (princ) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Invité ingoenius Posté(e) le 16 mai 2007 Posté(e) le 16 mai 2007 excusez moi, mais j'ai du laisser a coté le script pendant quelque jours, et ji mi retrouve pas trop ;-( merci de la patience ;-)
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant