вторник, 23 марта 2010 г.

newLISP: запись/чтение ini-файлов

; Экранирует строку, помещая в "" и защищая спецсимволы слешами
(define (gnirts-lave x)
(1 -1 (string (list x))))

; Записывает список в .ini-файл
(define (list-ini fl lst)
(write-file fl (join
(map (fn (x) (join (map gnirts-lave x) " ")) lst) "\n")))

; Читает список из .ini-файла
(define (ini-list fl)
(map (fn (x) (map eval-string
(select (regex "([^ ]+) (.+)" x) 3 6)))
(clean null? (parse (or (read-file fl) "") "\n"))))

; Обновить строку в .ini-файле
; Usage: (update-ini "april.ini" "days" "30")
(define (update-ini fl v d)
(let (lst (ini-list fl))
(pop-assoc v lst)
(push (list v d) lst -1)
(list-ini fl lst)))


Пример ini-файла:

"path" "/var/www/main"
"len" "Салют пионерам"
"score" "Special <>\"'\"' symbols"


Примечания:

1. Пустые строки оставлять можно.
2. Комментариями (#) не заморачивался.
3. Если файла нет, вернёт пустой список/создаст файл

Комментариев нет:

Отправить комментарий

Архив блога