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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Типы данных

Типы данных

Ответ
Поиск в этой теме
Непрочитано 12.08.2007, 19:46 #1
Типы данных
Holon
 
CNC
 
Israel
Регистрация: 07.07.2007
Сообщений: 302

Судя повсему проблемма заключается в типе данных в
Код:
[Выделить все]
(if ( >= cdate lic)
игнорируется сравнение, вот для наглядности в функцию добавил,
Код:
[Выделить все]
(list lic cdate (type lic) (type cdate))
что-бы внести ясность. Я впринципе хотел создать функцию
для ограничения своих функций по времени, к примеру приходит определенное число
функция обращается к файлу сравнивает его с данными в файле и если дата совпала
или больше то функция перестает запускать остальные функции загруженнуе с ней в одном файле, и в добавок в файл прописывает всякий бред
Код:
[Выделить все]
(write-line(strcat "License Manager" "_" licpath licfile) test_lic)
для того,что-бы нельзя было перевести дату назад. В самом файле прописано 20070812 Вот пример кода
Код:
[Выделить все]
(defun tmp_lic (/ test_lic cdate lic basepath licpath licfile)
  (setq	cdate	 (fix(getvar "cdate"))
	basepath "U:\\lisp\\"
	licpath	 (strcat basepath "lic\\")
	licfile	 "License.lic"
  )
  (setq	test_lic (open (strcat licpath licfile) "r")
	lic	 (read-line test_lic)
        lic (atoi lic)
	)
  (close test_lic)
  (if ( >= cdate lic)
  (progn
  (setq test_lic (open (strcat licpath licfile) "a"))
	   (write-line(strcat "License Manager" "_" licpath licfile) test_lic)
	   (close test_lic)
  );end progn
  );end if
  (if (< cdate lic)(c:Glass))
  (list lic cdate (type lic) (type cdate))
  )
Просмотров: 9705
 
Непрочитано 12.08.2007, 22:11
#2
Кулик Алексей aka kpblc
Moderator

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


А попробовать выполнить обратное, то есть itoa не пробовал? Число 20070812 превышает предельный размер целых чисел. Попробуй для преобразования в строку числа использовать (vl-princ-to-string) - результат будет гарантированно верный.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.08.2007, 23:19
#3
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Честно говоря я хода мысли непонял, можно поподробней пожалуйста.
Holon вне форума  
 
Непрочитано 12.08.2007, 23:59
#4
Кулик Алексей aka kpblc
Moderator

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


Сорри, 2 дня были очень тяжелыми, мозги работают через раз. Ограничение на величину integer не превышено (судя по документации). Но я бы либо "разбивал" дату на отдельные части - год, месяц, день, и сравнивал уже их, либо попробовал бы нечто типа:
Код:
[Выделить все]
(defun test (/ *error* file_handle lic cdate)
  (defun *error* (msg)
    (vl-catch-all-apply '(lambda () (close file_handle)))
    (princ msg)
    (princ)
    ) ;_ end of defun
  (or *lic-path* (setq *lic-path* "d:\\lisp\\lic\\"))
  (or *lic-file* (setq *lic-file* "license.lic"))
  (if (findfile (strcat *lic-path* *lic-file*))
    (progn
      (setq file_handle (open (findfile (strcat *lic-path* *lic-file*)) "r")
            lic         (read-line file_handle)
            cdate       (vl-princ-to-string (fix (getvar "cdate")))
            ) ;_ end of setq
      (close file_handle)
      (if (< cdate lic)
        (progn
          (setq file_handle
                 (open (findfile (strcat *lic-path* *lic-file*)) "a")
                ) ;_ end of setq
          (write-line
            (strcat "LicenseManager_" *lic-path* *lic-file*)
            file_handle
            ) ;_ end of write-line
          (close file_handle)
          ) ;_ end of progn
        (progn
          (alert "Licensed time expired!")
          (exit)
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of progn
    (progn
      (alert "Can't locate license file!")
      (exit)
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
Вроде бы корректно работает (сравниваются строки, а не числа).
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2007, 09:05
#5
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Проверял неработает результат следующий если в файл "license.lic" прописываю
20070812 то функсия (test) выдает алерт на экран (alert "Licensed time expired!")и выходит не прописывая в "license.lic" ничего, в конце функция возврасщает
_$ (test)
quit / exit abort


теперь если я прописываю в ручную в "license.lic" 20070817 заметим что сегодня
(20070813), функция возврачает
_$ (test)
nil
Незапуская мою функцию (c:Glass) Я в принципе ничего неменял кроме диск D: на диск U: к знаку "<" добавил "<=" и добавил строку для запуска моей функции
(if (> cdate lic)(c:Glass))
Код:
[Выделить все]
(defun test (/ *error* file_handle lic cdate) 
  (defun *error* (msg) 
    (vl-catch-all-apply '(lambda () (close file_handle))) 
    (princ msg) 
    (princ) 
    ) ;_ end of defun 
  (or *lic-path* (setq *lic-path* "u:\\lisp\\lic\\")) 
  (or *lic-file* (setq *lic-file* "license.lic")) 
  (if (findfile (strcat *lic-path* *lic-file*)) 
    (progn 
      (setq file_handle (open (findfile (strcat *lic-path* *lic-file*)) "r") 
            lic         (read-line file_handle) 
            cdate       (vl-princ-to-string (fix (getvar "cdate"))) 
            ) ;_ end of setq 
      (close file_handle) 
      (if (<= cdate lic) 
        (progn 
          (setq file_handle 
                 (open (findfile (strcat *lic-path* *lic-file*)) "a") 
                ) ;_ end of setq 
          (write-line 
            (strcat "LicenseManager_" *lic-path* *lic-file*) 
            file_handle 
            ) ;_ end of write-line 
          (close file_handle) 
          ) ;_ end of progn 
        (progn 
          (alert "Licensed time expired!") 
          (exit) 
          ) ;_ end of progn 
        ) ;_ end of if 
      ) ;_ end of progn 
    (progn 
      (alert "Can't locate license file!") 
      (exit) 
      ) ;_ end of progn 
    ) ;_ end of if
  (if (> cdate lic)(c:Glass))
  ) ;_ end of defun
Holon вне форума  
 
Непрочитано 13.08.2007, 09:08
#6
Кулик Алексей aka kpblc
Moderator

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


Я не понял, c:glass должна запускаться в каком случае? Если лицензия еще не кончилась?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2007, 09:15
#7
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Да конечно
Holon вне форума  
 
Непрочитано 13.08.2007, 09:19
#8
Кулик Алексей aka kpblc
Moderator

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


Дык ента...
Код:
[Выделить все]
(defun test (/ *error* file_handle lic cdate)
  (defun *error* (msg)
    (vl-catch-all-apply '(lambda () (close file_handle)))
    (princ msg)
    (princ)
    ) ;_ end of defun
  (or *lic-path* (setq *lic-path* "u:\\lisp\\lic\\"))
  (or *lic-file* (setq *lic-file* "license.lic"))
  (if (findfile (strcat *lic-path* *lic-file*))
    (progn
      (setq file_handle (open (findfile (strcat *lic-path* *lic-file*)) "r")
            lic         (read-line file_handle)
            cdate       (vl-princ-to-string (fix (getvar "cdate")))
            ) ;_ end of setq
      (close file_handle)
      (if (<= cdate lic)
        (progn
          (setq file_handle
                 (open (findfile (strcat *lic-path* *lic-file*)) "a")
                ) ;_ end of setq
          (write-line
            (strcat "LicenseManager_" *lic-path* *lic-file*)
            file_handle
            ) ;_ end of write-line
          (close file_handle)
          (c:glass)
          ) ;_ end of progn
        (progn
          (alert "Licensed time expired!")
          (exit)
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of progn
    (progn
      (alert "Can't locate license file!")
      (exit)
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
Кто мешает делать так? Или я чего-то не учитываю?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2007, 09:35
#9
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Этот вариант работает,только лицензионный файл незатирается
Holon вне форума  
 
Непрочитано 13.08.2007, 09:44
#10
Кулик Алексей aka kpblc
Moderator

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


Ээээ... А с какого перепугу оно должно затираться-то? Сначала файл открывается в режиме чтения, потом - добавления в конец. Между прочим, взято с исходного кода
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2007, 09:57
#11
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Цитата:
Сообщение от Кулик Алексей aka kpblc
Ээээ... А с какого перепугу оно должно затираться-то? Сначала файл открывается в режиме чтения, потом - добавления в конец. Между прочим, взято с исходного кода
нет добавления в конец
Holon вне форума  
 
Автор темы   Непрочитано 13.08.2007, 10:02
#12
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Кстати хорочая идея я поменяю "a" на "W", чтобы затирала правильную строку.
Holon вне форума  
 
Непрочитано 13.08.2007, 10:27
#13
Кулик Алексей aka kpblc
Moderator

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


Все добавляется. Чтобы был автоматический перевод строк, замени
Код:
[Выделить все]
(write-line
            (strcat "LicenseManager_" *lic-path* *lic-file*)
            file_handle
            )
на
Код:
[Выделить все]
(write-line
            (strcat "\nLicenseManager_" *lic-path* *lic-file*)
            file_handle
            )
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2007, 10:46
#14
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Нет проблема не в этом, я сейчас сделал анимацию на функцию то место где делается (write-line) обходится стороной, и перескакивает сразу на (alert "Licensed time expired!")
(exit)
Проблема по вложению (if и (progn
Holon вне форума  
 
Непрочитано 13.08.2007, 10:51
#15
Кулик Алексей aka kpblc
Moderator

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


А первая строка у тебя оканчивается символом перевода строки или нет? Имею в виду, ессно, строку файла лицензии
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2007, 10:54
#16
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


20070812
Holon вне форума  
 
Автор темы   Непрочитано 13.08.2007, 10:59
#17
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Анимация показивает, что до строки write-line дело даже недоходит, проблема в структуре ИМХО
Holon вне форума  
 
Непрочитано 13.08.2007, 10:59
#18
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Holon
20070812
А если сделать
Код:
:?:
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2007, 11:03
#19
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


а в чем разница ?
Holon вне форума  
 
Автор темы   Непрочитано 13.08.2007, 11:17
#20
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Да ошибка в структуре программы, когда лицензия правильная, 20070817 то добавляется строка
20070817

LicenseManager_u:\lisp\lic\license.lic
Holon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Типы данных

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

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