Aller au contenu

noms et versions


Messages recommandés

Invité ingoenius
Posté(e)

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 jpg

c:\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_

 

 

 

 

Posté(e)

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)

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

 

 

Posté(e)

 (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

Posté(e)
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)

j'arrive toujours pas a faire marcher, dans le test que je fais il existe le fichier _ver_1 et aussi le _ver_2

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

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

Posté(e)

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

Posté(e)

Salut

Pourquoi 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Invité ingoenius
Posté(e)

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]

Posté(e)

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 " existe

c'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...

Invité ingoenius
Posté(e)

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



Posté(e)
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)

excusez moi, mais j'ai du laisser a coté le script pendant quelque jours, et ji mi retrouve pas trop ;-(

 

merci de la patience ;-)

 

 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité