Тема: Из Лиспа в VBA и обратно

Как передать список файлов и путь к папке с ними в VBA из лиспа, а потом этот же список и путь в другой лисп?

Re: Из Лиспа в VBA и обратно

> Николай
Вариантов несколько
Через внешние файлы, через реестр, через переменные AutoCAD: USERS1..5
В данном разделе вопрос поднимался неоднократно
попробуй поискать

Re: Из Лиспа в VBA и обратно

> Николай
Для пакетной обработки выбрал я XML формат (понравилось), а в нем пропишите, все что Вам необходимо и передадите путь к файлу как параметр. Также INI файл можно использовать и т.д.

Re: Из Лиспа в VBA и обратно

> Andrew V. Anisimov
Через переменные AutoCAD: User1..5, во всех описаниях что нашел, говориться как то вскользь, а в help'е упоминания о таких переменных вроде нет.
Если не затруднит, покажите примерчик: как пользоваться етими переменными.
Заранеие спаибо.

Re: Из Лиспа в VBA и обратно

> SmeL
Если можно, напишите примерчик. У меня возникают трудности с использованием функций лиспа, отвечающих за обращение с файлами.
Простенький примерчик как в лиспе создать, записать, перезаписать, закрыть и удалить ТХТ файл.

Re: Из Лиспа в VBA и обратно

> Николай
Все это я делал на VB поэтому и предложил только вариант реализации. Если Вас устроит VB привиду пример

Re: Из Лиспа в VBA и обратно

Нет, спасибо не надо. Я с VBA в очень плохих отношениях.

Re: Из Лиспа в 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")

Re: Из Лиспа в VBA и обратно

> Евгений Елпанов
Огромное спасибо!

Re: Из Лиспа в VBA и обратно

> SmeL
А мне очень интересно, а может и еще кому сгодится, а?
~'J'~

Re: Из Лиспа в VBA и обратно

> Николай
По поводу переменных 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* практически неограниченна.

Re: Из Лиспа в VBA и обратно

Простенький примерчик как в лиспе создать, записать, перезаписать, закрыть и удалить ТХТ файл.

http://www.cad.dp.ua/stats/content.php? … e_mgk.html

Re: Из Лиспа в VBA и обратно

> Олег(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

Re: Из Лиспа в VBA и обратно

> SmeL
Спасибо, мне нравится твой стиль, поэтому и спросил
Нескромный вопрос: а где ты так круто научился этому
делу, я что-то не могу найти серьезных материалов,
в основном все ,больше начальные сведения плюс
кое-какишные примеры
~'J'~

Re: Из Лиспа в VBA и обратно

> Fatty
Олег(jr.) Сменил ник :) Научился этому на стуле дома + Инет и все это изучал ради интереса т.к. программером работаю пару месяцев только :D
Мне тоже нравится Ваш VBA код, про лисп не знаю почти не работал с ним.

Re: Из Лиспа в VBA и обратно

> SmeL
Ну ни фига себе! За несколько месяцев???
(далее непереводимая игра слов)
Насчет ника:
У меня слетели настройки и пришлось использовать
второй ник, чего то вытворяет Windows на моем компе,
а теперь опять выплыл доступ к старой кличке, чем я
весьма озадачен :(
~'J'~

Re: Из Лиспа в VBA и обратно

> Олег(jr.)
Приношу извинение перед читателями топика за оффтопик :), но я не могу не поправиться не не пару месяцев на это ушло, просто программером работаю пару месяцев.

Re: Из Лиспа в VBA и обратно

> SmeL
Пока модератор благодушен к личной переписке,
предлагаю связаться со мной, есть предложение
~'J'~