CADxp: Programmer autolisp pour UTF-8 - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Programmer autolisp pour UTF-8

#1 L'utilisateur est hors-ligne   MickyD 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 4
  • Inscrit(e) : 07-juillet 05

Posté 24 juillet 2012 - 10:32

Bonjour à tous et encore bravo pour toutes vos réponses qui nous aident beaucoup.

Pourriez-vous m'aider à finaliser une application qui doit me permettre d'écrire un fichier au format GML.
Je n'ai aucun problème pour programmer en autolisp, la création de ce fichier mais là où je sèche, c'est au niveau des caractères accentués. Il faudrait que mon fichier soit encodé en UTF-8.
Comment faut-il faire en autolisp ou vlisp pour encoder un fichier écrit en ANSI?
Merci d'avance pour l'aide que vous pourriez m'apporter.
0

#2 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 10687
  • Inscrit(e) : 02-septembre 05

Posté 25 juillet 2012 - 08:48

Salut,

Tu peux essayer ces routines:

;; gc:WriteStream
;; Ecrit un texte dans un fichier suivant l'encodage de caractère spécifié
;; Retourne le chemin du fichier ou nil si l'opération a échoué.
;;
;; Arguments
;; text     : le texte à écrire
;; filename : le chemin du ficher
;; charset  : le système d'encodage (exemples : "iso-8859-1" (ascii/ANSI), "utf-8", "unicode")
(defun gc:WriteStream (text filename charset / stream result)
  (vl-load-com)
  (if (setq stream (vlax-create-object "ADODB.Stream"))
    (progn
      (setq result
	     (vl-catch-all-apply
	       (function
		 (lambda ()
		   (vlax-put stream 'Charset charset)
		   (vlax-invoke stream 'Open)
		   (vlax-invoke stream 'WriteText text 0)
		   (vlax-invoke stream 'SaveToFile filename 2)
		   (vlax-invoke stream 'Close)
		 )
	       )
	     )
      )
      (vlax-release-object stream)
      (if (not (vl-catch-all-error-p result))
	filename
      )
    )
  )
)

;; gc:ReadStream
;; Lit un texte dans un fichier suivant l'encodage de caractère spécifié
;; Retourne le contenu du fichier ou nil si l'opération a échoué.
;;
;; Arguments
;; filename : le chemin du ficher
;; charset  : le système d'encodage (exemples : "iso-8859-1" (ascii/ANSI), "utf-8", "unicode")
(defun gc:ReadStream (filename charset / stream retval)
  (vl-load-com)
  (if (and (setq filename (findfile filename))
	   (setq stream (vlax-create-object "ADODB.Stream"))
      )
    (progn
      (vl-catch-all-apply
	(function
	  (lambda ()
	    (vlax-put stream 'Charset charset)
	    (vlax-invoke stream 'Open)
	    (vlax-invoke stream 'LoadFromFile filename)
	    (setq retval (vlax-invoke stream 'ReadText -1))
	    (vlax-invoke stream 'Close)
	  )
	)
      )
      (vlax-release-object stream)
      retval
    )
  )
)

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#3 L'utilisateur est en ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6718
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

  Posté 26 novembre 2014 - 18:47

Bonsoir Gilles,

Y a un truc qui m'échappe ! Le source, c'est bien un LISP ? Une fois chargé, je tape quelle commande ?

Je te remercie.

Christian
Formateur, Consultant Expert AutoCAD Indépendant, Formation AutoCAD, télécharger des Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#4 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 10687
  • Inscrit(e) : 02-septembre 05

Posté 26 novembre 2014 - 20:49

Salut,

Il ne s'agit pas de commandes, mais de fonctions LISP définies avec (defun ...) qui sont à utiliser comme les fonctions LISP natives.
Ces fonctions requièrent des arguments comme décrit dans les commentaires de l'en-tête.

Exemple d'utilisation :

Ecrire "En-tête à lire méticuleusement" dans un fichier avec l'encodage UTF-8
(gc:WriteStream "En-tête à lire méticuleusement" "C:\\Temp\\Test.txt" "utf-8")


Lire le fichier en utilisant l'encodage unicode
(gc:ReadStream "C:\\Temp\\Test.txt" "unicode")
retourne "??????????????????"

Lire le fichier en utilisant l'encodage ascii/ANSI
(gc:ReadStream "C:\\Temp\\Test.txt" "iso-8859-1")
retourne "En-tête à lire méticuleusement"

Lire le fichier en utilisant l'encodage UTF-8
(gc:ReadStream "C:\\Temp\\Test.txt" "utf-8")
retourne "En-tête à lire méticuleusement"

AutoLISP utilise l'encodage ascii/ANSI
((lambda (file / line)
   (setq line (read-line file))
   (close file)
   line
 )
  (open "C:\\Temp\\Test.txt" "r")
)
retourne "En-tête à lire méticuleusement"
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#5 L'utilisateur est en ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6718
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 26 novembre 2014 - 21:05

Bonsoir,

Effectivement, ça méritait quelques précisions...

Merci Gilles.

Christian
Formateur, Consultant Expert AutoCAD Indépendant, Formation AutoCAD, télécharger des Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)