N° | Fonction | Catégorie | Version |
---|---|---|---|
BIF 03 | BiF_ReadFileTxt | Gestion de Fichiers | 1.0 - Janvier 2007 |
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 |
![]() 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")) ![]() 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")) |
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