Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Afin de limiter les tests d exécution de certaines de mes routines manipulant les textes, j'utilise cette fonction pour éliminer les lignes vides de caractères.

 

;Effacer les lignes vides (pouvant contenir blancs et Tabulations) d  un fichier texte
;Arguments: OpFichier -Chemin du fichier ex: "C:/Test/Communes.csv"
; Utilise DosLib          
(defun SupLigVid (OpFichier /  Fch Pst Nombl riid rid
)
(setq  	
	Nombl 	(Len-Line OpFichier)
	Fch	(open OpFichier "r")
)
		(repeat Nombl
			(setq 	riid 	(read-line Fch)
				rid 	(dos_strtrim (dos_strreplace riid "\t" ""))
			)
			(if (not  (=  rid "")) (setq Pst (cons riid Pst)))
		)
		(setq Pst (reverse Pst))
		(close Fch) 
		(setq Fch (open OpFichier "w"))
		(foreach Z Pst (write-line Z Fch))
		(close Fch) T
)
;Compteur de lignes dun fichier Texte
;Arguments: OpenFichier -Chemin du fichier ex: "C:/Test/Communes.csv"
;retour: Entier
(defun Len-Line ( OpenFichier / len Fich)
(setq len 0 Fich (open OpenFichier "r"))
(while ( read-line Fich) (setq Len (+ 1 len)))
(close Fich)
len
)

 

Elle fonctionne bien, sauf qu'a la fin de la dernière ligne, elle ajoute un retour chariot ajoutant une ligne vide a la fin.

 

je ne vois pas comment l’éliminer...

 

Merci

Posté(e)

Je sais pas si ca va résoudre ton problème, mais j'aurai tendance à faire une boucle while plutôt que repeat (d'autant plus que repeat t'impose de faire un while pour déterminer le nombre de lignes):

[...]
(while (setq riid (read-line fch))
  (if (/= "" (setq rid (dos_strtrim (dos_strreplace riid "\t" ""))))
     (setq pst (cons pst rid))))
(setq pst (reverse pst))
[...]

Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog

Posté(e)

Je vient d'essayer avec write (qui n'est plus documenté ?) cela n'a rien changé.

 

Ce n'est pas grave, je ne vais pas passer mon temps la dessus, je m'en suis accommodé..

 

Et merci pour ton conseil Carboleum, c'est vrais que c'est plus concis.

 

a pluche et encore Merci

Posté(e)

Erratum, j'ai confondu princ et write

 

Après un resr rapide, ceci fonctionne

 

(defun c:test(/ fic)
 (setq fic (open "c:/test/test.txt" "w"))
 (princ "Ceci est un test" fic)
 (close fic)
 (princ)
)

 

@+

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

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é