BiF_ReadFileTxt

Fonction Catégorie Version
BIF 03 BiF_ReadFileTxt Gestion de Fichiers 1.0 - Janvier 2007

Description

But Récupère des listes dans un fichier texte
Prototype (BiF_ReadFileTxt Fichier)
Argument Fichier - Le nom du fichier à lire, y compris le path - chaîne -
Retours Une liste de sous-listes
Var. globales Néant
Description Retourne une liste de plusieurs sous-listes.
Chaque ligne représente une sous-liste.
Il peut y avoir des sous-listes "principales" :
elles doivent commencer après une ligne débutant obligatoirement par [SECTION] suivi ou non de commentaires.
Notes La 1ère ligne du fichier n'est pas conservée et sert de commentaires.
Le séparateur d'éléments (ou champs) doit être la barre |
Exemples
Fichier Blocs.lst
Commande: (BiF_ReadFileTxt "blocs.lst")
   retourne    
   
(("fg-ptsi" "Appui Simple" "1" "SYPTSI") 
("fg-ptco" "Appui Couple" "1" "SYPTCO")
("fg-ptmo" "Appui Moisé" "1" "SYPTMO") 
("fg-ptha" "Appui Haut" "1" "SYPTHA")
("fg-ebn" "Support EDF bois" "1" "SYEBN") 
("fg-pedb" "Support ADF 3" "1" "SYA3") 
("fg-pylo" "Pylône EDF  1" "SYPYLO")
("fg-eced" "Eclairage - EDF" "1" "SYECED")
("fg-fdp01" "Symbole utilisateur 01" "1" "fg-fdp01") 
("fg-fdp02" "Symbole utilisateur 02" "1" "fg-fdp02"))

Fichier Datas.505
 Autre exemple :

 Commande: (BiF_ReadFileTxt 
  (strcat $_rep "datas.505"))
    retourne
	
(("DISCONT1" "DISCONT2" "CACHE"
 "AXES" "FANTOME" "POINTILLE" 
 "MIXTE" "BORD") (("0" "7" 
"CONTINU") ("PLAN1" "3" "CACHE") 
("MURS" "7" "CONTINU") ("MENUIS" 
"1" "CONTINU") ("VERD" "4" 
"MIXTE") ("PORTES" "7" "CONTINU"
)) (("Standard" "TXT8" "N") 
("Italicc8" "ITALICC8" "N") 
("Romanc8" "ROMANC8" "N")
 ("Iso8" "ISO8" "N") 
("Standarv" "TXT8" "O")("Italicv8" "ITALICC8" "O")
("Romancv8" "ROMANC8" "O") ("Isov8" "ISO8" "O")))
Il y a 3 sous-listes principales dans cet exemple.	

Commande: (setq L1 (nth 0 (BiF_ReadFileTxt "datas.505")))
retourne
("DISCONT1" "DISCONT2" "CACHE" "AXES" "FANTOME" "POINTILLE" "MIXTE" "BORD")

Commande: (setq L2 (nth 1 (BiF_ReadFileTxt "datas.505")))
retourne
(("0" "7" "CONTINU") ("PLAN1" "3" "CACHE") ("MURS" "7" "CONTINU") 
("MENUIS" "1" "CONTINU") ("VERD" "4" "MIXTE") ("PORTES" "7" "CONTINU"))

Commande: (setq L3 (nth 2 (BiF_ReadFileTxt "datas.505")))
retourne
(("Standard" "TXT8" "N")("Italicc8" "ITALICC8" "N")("Romanc8" "ROMANC8" "N")
("Iso8" "ISO8" "N") ("Standarv" "TXT8" "O") ("Italicv8" "ITALICC8" "O")
("Romancv8" "ROMANC8" "O") ("Isov8" "ISO8" "O"))

La fonction


  1-  (defun BiF_ReadFileTxt (*File1 / FilOpen LineRead Lst_Ret Lst_Part Flag Cpt1)

  2-   (if (BiF_FileRead *File1)   
  3-     (progn
  4-       (setq FilOpen (open *File1 "r")        
  5-             Cpt1 0	                     ;  Compteur de lignes de la sous-liste
  6-       )
  7-       (read-line FilOpen)      	
  8-       (while (setq LineRead (read-line FilOpen))     
  9-          (setq LineRead (Bis_DelSpace LineRead))      
 10-          (if (= (substr LineRead 1 9) "[SECTION]")    ; si nouvelle sous-liste
 11-              (progn
 12-                 (if (= Cpt1 1)  
 13-                   (setq Lst_Part (reverse (car Lst_Part)))
 14-                 )   
 15-                 (setq Lst_Ret  (cons (reverse Lst_Part) Lst_Ret)
 16-                       Flag T	; ;  Indique plusieurs sous-listes
 17-                       Lst_Part '()	; ;  Réinitialise la sous-liste
 18-                       Cpt1 0
 19-                 )
 20-              )	; ;  fin de progn  -   sinon (pas [SECTION])
 21-              (setq LineRead (BiL_FrmLst LineRead "|")   
 22-                    Lst_Part (cons LineRead Lst_Part)  
 23-                    Cpt1 (1+ Cpt1)	; ;  y a t-il plus d'une ligne ?
 24-              )
 25-           ) 		; ;  fin If   ligne 12
 26-        ) 		; ;  fin  de la boucle while  ligne 8
 27-        (close FilOpen)	; ;  Referme le fichier
 28-      )		; ;  fin de progn  ligne 3
 29-    )			; ; fin If   ligne 2
 30-    (if Flag		; ; S'il y a plusieurs sous-listes,
 31-       (reverse (cons (reverse Lst_Part) Lst_Ret))
 32-       (reverse Lst_Part)	; ; sinon
 33-    )
 34-  )
Ligne 2 : BiF_FileRead vérifie si le fichier est accessible en lecture
Ligne 4 :   Ouverture du fichier en lecture
Ligne 5 :	 Compteur de lignes de la sous-liste
Ligne 7 :	   Lecture  1ère ligne du fichier - ligne non traitée
Ligne 8 :	     tant qu'il y a des lignes
Ligne 9 :	        Bis_DelSpace supprime les blancs inutiles
Ligne 10 :          Recherche  si nouvelle sous-liste s'il y a SECTION
Ligne 12 :     S 'il n'y a qu'1 ligne dans la sous-liste précédente,
Ligne 13 :	 Sinon (si le sinus est 1), retourne  0.0 >> angle de 0°
Ligne 14 :   Enlève liste de (liste de liste)  :  (("aaa")) donnera ("aaa")
Ligne 16 :   Drapeau Flag indique qu'il y a plusieurs sous-listes.
Ligne 21 :   Découpage de la chaîne à l'aide de BiL_FrmLst
Ligne 22 :   Construction de la sous-liste