| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Lisp Сравнить два файла по дате vl-file-systime

Lisp Сравнить два файла по дате vl-file-systime

Ответ
Поиск в этой теме
Непрочитано 01.07.2016, 11:50 #1
Lisp Сравнить два файла по дате vl-file-systime
sdv79
 
Инженер ЭОМ
 
Москва
Регистрация: 05.03.2009
Сообщений: 215

На вдаваясь в дебри кода получаю командой vl-file-systime два списка (2016 7 5 1 9 42 28 532) и (2016 6 4 30 13 59 59 895). Как определить более свежий?

Код:
[Выделить все]
 

;  (setq expans ".cuix") или  (setq expans ".mnu") или  (setq expans ".mnr")
; (setq *expansion_menu (".cui" ".cuix" ".mnc" ".mnr" ".mns"))
; (setq name_program "acad")

 
 (setq *menu_data (vl-file-systime ; вида (2016 6 4 30 13 59 59 895)
		   (findfile
		    (strcat name_program
			    expans
		    ) ;/ strcat
		   ) ;/ findfile
		 ) ;/ vl-file-systime
 ) ;/ setq

 


 (setq menu_data (+ ; получаем в минутах
 		   (* (-(nth 0  *menu_data)(car *menu_data ));
		      60  ; минут
		      24  ; часов
		      12  ; месяцев
		      365 ; дней
		   ) 
 		   (*(nth 1 *menu_data ) 60 24 12)     ; месяц
 		   (*(nth 3 *menu_data ) 60 24)        ; день месяца
 		   (*(nth 4 *menu_data ) 60 )          ; часы
 		   (nth 5 *menu_data)                  ; минуты
		 ) ;/ +
 ) ;/ setq

 (setq *menu (mapcar ; вида ("mySchema.cui" "mySchema.cuix" "mySchema.mnc" "mySchema.mnr" "mySchema.mns")
	       (function
	        (lambda (x) 
                 (strcat name_program x)
        	) ;/ lambda
	       ) ;/ function
               *expansion_menu
	     ) ;/ mapcar
  ) ;/ setq

 (setq *menu_data (mapcar (function
		           (lambda (x / y) ;/ обнуляем y
		            (if(setq y (findfile x))
	               ;|1|; (+
 		   	      (* (-(nth 0  (vl-file-systime y))(car *menu_data )); вычитаем год  иначе выдает ошибку
		      		 60
		      		 24
		      		 12
		      		 365
		   	     ) ;/ * 
 		   	     (*(nth 1 (vl-file-systime y) ) 60 24 12)     ; месяц
 		   	     (*(nth 3 (vl-file-systime y) ) 60 24)        ; день месяца
 		   	     (*(nth 4 (vl-file-systime y) ) 60 )          ; часы
 		   	     (nth 5   (vl-file-systime y))                ; минуты
		            ) ;/ +
		           ) ;/ if
	                  ) ;/ lambda
		         ) ;/ function
                         *menu
                ) ;/ mapcar
 ) ;/ setq
 (setq *menu_data (vl-remove-if
		    (function null)
		    *menu_data
		   ) ;/ vl-remove-if
 ) ;/ setq
 (setq *menu_data (mapcar ; вида (nil T)
		    (function
		     (lambda (x) 
                      (> menu_data x) ;(setq x (nth 0 *menu_data))
                     ) ;/ lambda
		    ) ;/ function
		    *menu_data
		  ) ;/ mapcar
 ) ;/ setq
) ;/ defun (c:myMenuUPdate ".mnu")
(cond
 (
  (member T (c:myMenuUPdate ".cuix")) ; если правлю меню ".cuix"
   ....
)) ;/  cond

Код работает не корректно. Есть функция cvunit, как ей воспользоваться не пойму.

Последний раз редактировалось sdv79, 01.07.2016 в 12:37.
Просмотров: 2789
 
Непрочитано 01.07.2016, 11:53
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


И в чем вопрос?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.07.2016, 13:51
#3
frostmourn


 
Регистрация: 23.04.2015
Сообщений: 163


Не вдавался в дебри. По-моему, лучше так
Код:
[Выделить все]
 
(defun srav (lst1 lst2 /)
	(cond
		(	(not (car lst1)) "=")
		(	(= (car lst1) (car lst2)) (srav (cdr lst1) (cdr lst2)))
		(	(> (car lst1) (car lst2)) ">")
		(T "<")
	)
)

(setq lst1 '(2016 6 4 30 13 59 59 895) lst2 '(2016 6 4 30 13 59 59 895)
	lst1 (cons (car lst1) (cons (cadr lst1) (cdddr lst1)))
	lst2 (cons (car lst2) (cons (cadr lst2) (cdddr lst2)))
)
(srav lst1 lst2)
frostmourn вне форума  
 
Автор темы   Непрочитано 01.07.2016, 16:06
#4
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Вроде работает)
sdv79 вне форума  
 
Непрочитано 01.07.2016, 16:44
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Забыли про вариант "файл только для чтения" - в таком случае vl-file-systime вернет nil. Мой вариант, возвращает строковое представление вида "ГГГГММДДччммсс" - во вложении
Вложения
Тип файла: lsp _kpblc-get-file-date.LSP (1.6 Кб, 31 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Lisp Сравнить два файла по дате vl-file-systime

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СПДС 10. После установки пропадают некоторые команды acad Konst085 ПО от CSoft 31 07.07.2016 14:46
Как сравнить два файла dwg на идентичность и найти различия Виктор777 AutoCAD 11 15.01.2014 15:41
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
Фатальная ошибка при попытке мониторинга изменения файла настроек. hwd Программирование 7 24.03.2010 23:45
Частичное открытие файла - не активно при открытии файла ADik AutoCAD 4 22.06.2006 07:35