Тема: Из Лиспа в VBA и обратно
Как передать список файлов и путь к папке с ними в VBA из лиспа, а потом этот же список и путь в другой лисп?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → LISP → Из Лиспа в VBA и обратно
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как передать список файлов и путь к папке с ними в VBA из лиспа, а потом этот же список и путь в другой лисп?
> Николай
Вариантов несколько
Через внешние файлы, через реестр, через переменные AutoCAD: USERS1..5
В данном разделе вопрос поднимался неоднократно
попробуй поискать
> Николай
Для пакетной обработки выбрал я XML формат (понравилось), а в нем пропишите, все что Вам необходимо и передадите путь к файлу как параметр. Также INI файл можно использовать и т.д.
> Andrew V. Anisimov
Через переменные AutoCAD: User1..5, во всех описаниях что нашел, говориться как то вскользь, а в help'е упоминания о таких переменных вроде нет.
Если не затруднит, покажите примерчик: как пользоваться етими переменными.
Заранеие спаибо.
> SmeL
Если можно, напишите примерчик. У меня возникают трудности с использованием функций лиспа, отвечающих за обращение с файлами.
Простенький примерчик как в лиспе создать, записать, перезаписать, закрыть и удалить ТХТ файл.
> Николай
Все это я делал на VB поэтому и предложил только вариант реализации. Если Вас устроит VB привиду пример
Нет, спасибо не надо. Я с VBA в очень плохих отношениях.
> Николай
(setq f (open "d:\\1.txt" "a")) (princ "test1\ntest2" f) (princ "test3\ntest4" f) (close f) (setq f (open "d:\\1.txt" "a")) (princ "test1\ntest2" f) (princ "test3\ntest4" f) (close f) (setq f (open "d:\\1.txt" "w")) (princ "test" f) (close f) (vl-file-delete "d:\\1.txt")
> SmeL
А мне очень интересно, а может и еще кому сгодится, а?
~'J'~
> Николай
По поводу переменных User*1-5... Справка:
USERI1-5
Системная переменная
Тип: целый
Сохранен в: рисунок
Начальное значение: 0
Обеспечивает хранение и получение целых значений . Существует пять системных переменных: USERI1, USERI2, USERI3, USERI4 и USERI5.
USERR1-5
Системная переменная
Тип: вещественный
Сохранен в: рисунок
Начальное значение: 0.0000
Обеспечивает хранение и получение вещественных чисел . Существует пять системных переменных: USERR1, USERR2, USERR3, USERR4 и USERR5.
USERS1-5
Системная переменная
Тип: строковый
Сохранен в: Не сохранен
Начальное значение: ""
Обеспечивает хранение и получение данных текстовой строки . Существует пять системных переменных: USERS1, USERS2, USERS3, USERS4 и USERS5.
Длина строки в переменных USERS* практически неограниченна.
Простенький примерчик как в лиспе создать, записать, перезаписать, закрыть и удалить ТХТ файл.
> Олег(jr.)
<< А мне очень интересно, а может и еще кому сгодится, а?
~'J'~ >>
'references Microsoft XML, vX.X
'Модераторы решите где жить данному посту сами, тут где появилася заявка либо в VBA
'Пример вырезан из контекста, проекта но функции работы с XML вроде все представил. Возможности данных модулей: Создание и чтение XML файлов, возможность корректировки XML файлов отсутствует
Option Explicit 'for XML------- Public objDoc As MSXML2.DOMDocument Public objNode As MSXML2.IXMLDOMNode Public objRoot As MSXML2.IXMLDOMElement Public objCar As MSXML2.IXMLDOMElement Public objXMLDOM As New MSXML2.DOMDocument26 Public objNodes As IXMLDOMNodeList Public objBookNode As IXMLDOMNode
Дальше два модуля так легче будет разобраться
XML_READER
Option Explicit Public NodeValue As Integer Public Sub ReadXMLFiles(IXML As String) Call LoadXMLFiles(IXML) Call ReadFile End Sub Sub LoadXMLFiles(strXMLFilePath As String) On Error GoTo ErrorHandler ' Enable error-handling routine. objXMLDOM.async = False objXMLDOM.Load (strXMLFilePath) Exit Sub ' Exit to avoid handler. ErrorHandler: ' Error-handling routine. Set objXMLDOM = Nothing End End Sub Sub ReadFile() If FEX(App.path & "\Attr\Attributo.dwg") = False Then MsgBox "Missing Attribute file '" & App.path & "\Attr\Attributo.dwg'", vbCritical, "All Operations Aborted" Exit Sub End If CreateXML Dim i As Integer Set objNodes = objXMLDOM.selectNodes("GOAL_PACK") For Each objBookNode In objNodes If objBookNode.selectNodes("COUNT").Length <> 0 Then NodeValue = objBookNode.selectSingleNode("COUNT").nodeTypedValue End If Next objBookNode For i = 1 To NodeValue Set objNodes = objXMLDOM.selectNodes("GOAL_PACK/GOAL" & i) For Each objBookNode In objNodes If objBookNode.selectNodes("IDWG").Length <> 0 Then IDWG = objBookNode.selectSingleNode("IDWG").nodeTypedValue End If If objBookNode.selectNodes("IMDB").Length <> 0 Then IMDB = objBookNode.selectSingleNode("IMDB").nodeTypedValue End If If objBookNode.selectNodes("ODWG").Length <> 0 Then ODWG = objBookNode.selectSingleNode("ODWG").nodeTypedValue End If Next Aborted = 0 summa = 0 ms = GetTickCount Begin Select Case Aborted Case 0 buildXML i, summa, CInt((GetTickCount - ms) / 1000), , "ALL OK" Case 1 ErrCount = ErrCount + 1 ODWG = "0" buildXML i, 0, CInt((GetTickCount - ms) / 1000), "ABORTED", "Incorect DB Path" Case 2 ErrCount = ErrCount + 1 ODWG = "0" buildXML i, 0, CInt((GetTickCount - ms) / 1000), "ABORTED", "Incorect DWG template Path" Case 3 ErrCount = ErrCount + 1 ODWG = "0" buildXML i, 0, CInt((GetTickCount - ms) / 1000), "ABORTED", "Don't found Attr file" End Select Next ADoc.Close False Set objCar = objDoc.createElement("INFO") objRoot.appendChild objCar Set objNode = objDoc.createElement("GOALS_COUNTS") objNode.Text = NodeValue objCar.appendChild objNode Set objNode = objDoc.createElement("ERROR_COUNTS") objNode.Text = ErrCount objCar.appendChild objNode Set objNode = objDoc.createElement("TIME_SPEND") objNode.Text = Format((GetTickCount - ProcTime) / 1000, "#") objCar.appendChild objNode Set objNode = objDoc.createElement("TIME_FINISHED") objNode.Text = Time$ objCar.appendChild objNode Set objNode = objDoc.createElement("DATE_FINISHED") objNode.Text = Date$ objCar.appendChild objNode Set objNode = objDoc.createElement("GENERATED_BY") objNode.Text = "DM2DA v0.3" objCar.appendChild objNode objDoc.Save OREP If GetCommand.InStrCmd("DBAL ") Or GetCommand.InStrCmd(" DBAL") Then Else Dim blockname As String blockname = "DM2DA Info" If foundError = True Then blockname = blockname & " Found error in XML!" End If Call ShellTrayIconAdd(0, LoadResPicture("PINGUIN", vbResIcon), "DM2DA Info") Call ShellTrayBalloonTipShow(0, 1, blockname, "DM2DA has finished processing. For detailed information please see the report.") End If If GetCommand.InStrCmd("DSTS") Then DisableStSuite False End Sub
XML_WRITER
Public Sub CreateXML() Set objDoc = New DOMDocument objDoc.resolveExternals = True Set objNode = objDoc.createProcessingInstruction( _ "xml", "version='1.0' encoding='UTF-8'") Set objNode = objDoc.insertBefore(objNode, _ objDoc.childNodes.Item(0)) Set objRoot = objDoc.createElement("GOALREPORT") Set objDoc.documentElement = objRoot objRoot.setAttribute "xmlns:od", _ "urn:schemas-microsoft-com:officedata" End Sub Public Function buildXML(i As Integer, attrI As Long, pT As Integer, Optional sts As String = "FINISHED", Optional desc As String = "") Set objCar = objDoc.createElement("GOAL" & i) objRoot.appendChild objCar Set objNode = objDoc.createElement("IDWG") objNode.Text = IDWG IDWG = "" objCar.appendChild objNode Set objNode = objDoc.createElement("IMDB") objNode.Text = IMDB IMDB = "" objCar.appendChild objNode Set objNode = objDoc.createElement("ODWG") objNode.Text = ODWG ODWG = "" objCar.appendChild objNode Set objNode = objDoc.createElement("ATTR_INSERTED") objNode.Text = attrI objCar.appendChild objNode Set objNode = objDoc.createElement("STATUS") objNode.Text = sts objCar.appendChild objNode Set objNode = objDoc.createElement("DESCRIPTION") objNode.Text = desc objCar.appendChild objNode Set objNode = objDoc.createElement("PROCESING_TIME") objNode.Text = pT objCar.appendChild objNode End Function
> SmeL
Спасибо, мне нравится твой стиль, поэтому и спросил
Нескромный вопрос: а где ты так круто научился этому
делу, я что-то не могу найти серьезных материалов,
в основном все ,больше начальные сведения плюс
кое-какишные примеры
~'J'~
> Fatty
Олег(jr.) Сменил ник :) Научился этому на стуле дома + Инет и все это изучал ради интереса т.к. программером работаю пару месяцев только :D
Мне тоже нравится Ваш VBA код, про лисп не знаю почти не работал с ним.
> SmeL
Ну ни фига себе! За несколько месяцев???
(далее непереводимая игра слов)
Насчет ника:
У меня слетели настройки и пришлось использовать
второй ник, чего то вытворяет Windows на моем компе,
а теперь опять выплыл доступ к старой кличке, чем я
весьма озадачен :(
~'J'~
> Олег(jr.)
Приношу извинение перед читателями топика за оффтопик :), но я не могу не поправиться не не пару месяцев на это ушло, просто программером работаю пару месяцев.
> SmeL
Пока модератор благодушен к личной переписке,
предлагаю связаться со мной, есть предложение
~'J'~
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → LISP → Из Лиспа в VBA и обратно
Форум работает на PunBB, при поддержке Informer Technologies, Inc