Импорт данных из *шт4

0 голосов
спросил 16 Сен, 03 от Гость (210,080 баллов) в категории Программные продукты Esri
Как автоматизировать чтение файла *.in4 в ArcView3

3 Ответы

0 голосов
ответил 26 Сен, 03 от Vladimir_Chernov (320 баллов)

Прошу прощения за объем, но многим может пригодиться....

/3.1
(Extension.1
 Name: "Invent"
 FirstRootClassName: "Choice"
 Roots: 2
 Roots: 3
 Roots: 4
 Roots: 5
 Roots: 6
 Roots: 7
 Roots: 8
 Roots: 9
 Roots: 10
 Version: 31
 About: "Загружает в проект ArcView файлы типа in4 (v1.0)\nАндрей А. Дитковский, ГКП НИВЦ \"Градостроитель\""
 InstallScript: 11
 UninstallScript: 12
 ExtVersion: 1
)

(Choice.2
 Help: "Загрузить файлы типа 'in4'"
 Label: "Load IN4..."
 Click: "Invent.Load_IN4"
 Shortcut: "Keys.None"
)

(Script.3
 Name: "Invent.Analyse"
 SourceCode: "'// Invent.Analyse (analyse.ave)\n'// \n'// Синтаксический анализатор.\n'// Модуль анализирует входной поток, преобразуя его во внутренние данные.\n'// Андрей А. Дитковский, ГКП НИВЦ \"Градостроитель\", тел. (0612) 33-10-51\n'// \n'// Функции связанные с работой данного модуля:\n'//  Invent.GetToken - возвращает следующую лексему во входном потоке;\n'//  Invent.Error - выдает сообщение об ошибке и завершает работу всех исполняющихся скриптов;\n'// Необходимые параметры:\n'//  _lstIN4 - входной поток (список перекодиров
анных строк файла IN4);\n'//  _lstObjType - список допустимых типов объектов;\n'//  _lstObjParam - список допустимых параметров объектов;\n'//  _lstPntParam - список допустимых параметров пункта;\n'// Использующиеся параметры:\n'//  _LineCount - количество строк во входном потоке;\n'//  _nCurLine - номер текущей разбираемой строки;\n'//  _strCurLine - текущая разбираемая строка;\n'//  _nCurPos - текущая позиция в разбираемой строке;\n'//  _nTokenType - тип возвращаемой лексемы, если лексема не распознана возвращаетс
я -1;\n'//  _strToken - содержит возвращаемую лексему;\n'//  _nToken - содержит внутреннее представление лексемы являющейся параметром объекта,\n'//            для остальных лексем принимает значение -1;\n'// По завершению работы анализатора, данные будут содержаться в списках:\n'//  lstShpTypes - список типов загружаемых объектов;\n'//  lstShpPoints - все загружаемые объекты;\n'//  lstShpParam - семантика загружаемых объектов;\n'//  lstAllNP - список имен всех загружаемых пунктов;\n'//  lstAllPnt - все загружаемые
пункты.\n\nif ((_lstIN4 = nil) or (_lstObjType = nil) or (_lstObjParam = nil) or (_lstPntParam = nil)) then\n  MsgBox.Error(\"Не инициализированны некоторые параметры !\", \"\")\n  exit\nend\n\n'// Начальная инициализация модуля\n\n_LineCount = _lstIN4.Count\n_nCurLine = 0\n_strCurLine = _lstIN4.Get(_nCurLine)\n_nCurPos = 0\n\n_nTokenType = -1\n_strToken = \"\"\n_nToken = -1\n\nlstParVal = {}\nlstPntPar = {}\nlstPntParVal = {}\nlstPoints = {}\n\nfor each n in 0..(_lstObjParam.Count-1)\n  lstParVal.Add(0)\nend\nfor each n in 0..(_lstPntPar
am.Count-1)\n  lstPntParVal.Add(-1)\nend\n\nlstShpTypes = {}\nlstShpPoints = {}\nlstShpParam = {}\nlstAllNP = {}\nlstAllPnt = {}\n\nfObjType = false 'Установлен когда считан тип текущего объекта\nfHavePntPar = false 'Установлен когда считан хоть один параметр точки\nfMakePoint = false 'Установлен когда предпологается что считаны все параметры точки (пункта)\nfMakeShape = false 'Установлен когда предпологается что считаны все параметры объекта\nfMustbeDelim = true 'Установлен когда необходимо проверить наличие корректного
 разделителя\n\n'// Основной цикл анализатора\nav.ShowStopButton\nwhile (_nCurLine < _LineCount)\n  _Func.Get(\"Invent.GetToken\").Doit(1)\n  if (_nTokenType = 2) then\n    nPar = _nToken\n    \n    'Если считанный параметр уже имеется в lstPntParVal, значит он принадлежит новой точке\n    if (lstPntParVal.Get(nPar) = -1) then\n      'Проверяем присутствие знака '='\n      _Func.Get(\"Invent.GetToken\").Doit(1)\n      if (_nTokenType <> 4) then\n        _Func.Get(\"Invent.Error\").Doit({4, _strToken})\n      end\n      \n      'С
читываем значение параметра\n      _Func.Get(\"Invent.GetToken\").Doit(1)\n      \n      'Анализируем полученное значение параметра\n      if (_nTokenType = -1) then\n        lstPntParVal.Set(nPar, _strToken)\n        \n      elseif (_nTokenType = 5) then\n        if (_nToken = 1) then\n          _Func.Get(\"Invent.Error\").Doit({1, \"\"})\n        else\n          lstPntParVal.Set(nPar, _strToken)\n        end\n        \n      elseif (_nTokenType = 3) then\n        lstPntParVal.Set(nPar, \"0\")\n        \n        'Сбрасываем флаг н
еобходимости проверки разделителя\n        fMustbeDelim = false\n        \n      elseif (_nTokenType = 0) then\n        'Вернуть лексему во входной поток\n        _nCurPos = _nCurPos - _strToken.Count\n        \n        lstPntParVal.Set(nPar, \"0\")\n        \n        'Сбрасываем флаг необходимости проверки разделителя\n        fMustbeDelim = false\n        \n      elseif (((_nTokenType >= 1) and (_nTokenType <= 2)) or (_nTokenType = 6)) then\n        _Func.Get(\"Invent.Error\").Doit({6, _strToken})\n        \n      elseif (_
nTokenType = 4) then\n        _Func.Get(\"Invent.Error\").Doit({5, \"\"})\n        \n      elseif (_nTokenType = 10) then\n        lstPntParVal.Set(nPar, \"0\")\n        \n        'Сбрасываем флаг необходимости проверки разделителя\n        fMustbeDelim = false\n        \n      end\n      \n      'Устанавливаем флаг указывающий что считан параметр точки\n      fHavePntPar = true\n      \n    else\n      'Устанавливаем флаг разрешающий создание точки\n      fMakePoint = true\n      \n      'Вернуть лексему во входной поток\n      _n
CurPos = _nCurPos - _strToken.Count\n      \n      'Сбрасываем флаг необходимости проверки разделителя\n      fMustbeDelim = false\n      \n    end\n   

0 голосов
ответил 06 Апр, 04 от Гость (210,080 баллов)

image привет

 

0 голосов
ответил 06 Апр, 04 от Гость (210,080 баллов)

где можна найти in4.mb

 

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...