Страница 2 из 5

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:39
finsoftrz
Я неправильно сказал. Запуск не через run, а в виде процесса. Это позволяет нашему приложению контролировать вызываемую программу и прерывать ее работу принудительно, если надо. То есть как-то так:

loc:ok=SELF.StartProcess('wscript ' & clip(SELF.FileNameScript))

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:41
Constantine
А как это по скорости?
Пробовал ли кто распарсить серьезный файл, мегабайт на 100?
Сколько занимает по времени?

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:43
Игорь Столяров
finsoftrz писал(а): 19 Июнь 2019, 9:34В реальной жизни парсинг xml не должен быть чем-то, на что надо тратить много времени.
Вы даже не представляете, как я с Вами согласен в этом вопросе ! :)
Но, блин, реалии далеки от этого, причём независимо от выбора конкретной технологии парсинга XML … :(

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:43
Constantine
finsoftrz писал(а): 19 Июнь 2019, 9:39loc:ok=SELF.StartProcess('wscript ' & clip(SELF.FileNameScript))
Ага!
Т.е., все-таки, через Shell...

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:44
Игорь Столяров
Constantine писал(а): 19 Июнь 2019, 9:41Пробовал ли кто распарсить серьезный файл, мегабайт на 100?
Вопрос не корректный. Скорость парсинга XML документа очень сильно зависит от его структуры.
Одно дело залить линейный список и совсем другое выковыривать 6-ой аттрибут в 7-ом уровне вложенности тегов. :(

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:48
Constantine
Это верно.
Но, при таких размерах, хотелось бы просто получить некое общее представление.

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:48
finsoftrz
Constantine писал(а): 19 Июнь 2019, 9:43
finsoftrz писал(а): 19 Июнь 2019, 9:39loc:ok=SELF.StartProcess('wscript ' & clip(SELF.FileNameScript))
Ага!
Т.е., все-таки, через Shell...
Через win api CreateProcess.

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 9:55
Constantine
finsoftrz писал(а): 19 Июнь 2019, 9:48ерез win api CreateProcess.
Спасибо, понятно. Это, примерно, одно и то же.

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 10:09
Constantine
Наткнулся на примерчик парсинга через OLE (MSXML2.DOMDocument): http://www.script-coding.com/XMLDOMscripts.html
А так кто-нибудь пробовал?
По-моему, должно быть быстрее, чем через файл.

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 10:14
Yufil
Если чисто теоретически - последний раз разбирал XML( SCORM 2004 manifest) питоноскриптом - пакетом xmltodict https://pypi.org/project/xmltodict/, потом можно и в JSON одной строкой выгрузить. Если через файл или входной-выходной поток - удобно... Правда, этот прожект с Кларионом слабо связан.

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 10:18
Игорь Столяров
Constantine писал(а): 19 Июнь 2019, 10:09По-моему, должно быть быстрее, чем через файл.
Так это и есть парсинг XML скриптом … Там везде идёт 3-ей строкой: xmlParser.load "C:\Sample.xml" … :)

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 10:25
Constantine
Не совсем так. Это - OLE-объект, которому можно посылать команды.
Если делать через Shell/CreateProcess, результаты можно поместить только в файл, который потом нужно будет считывать.
А таким образом можно результаты поместить сразу в переменную/queue, что может быть гораздо удобнее.

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 10:29
Игорь Столяров
Constantine писал(а): 19 Июнь 2019, 10:25можно результаты поместить сразу в переменную/queue
Тут вопрос в том, какие результаты … Например OLE интерфейс Microsoft Word клинит при длине строки более 255 символов.
Как здесь ? Не знаю - надо пробовать. А к чему всё это ? Чем Вас не устраивает парсер Clarion XML ? Не надо никаких файлов
и внешних запусков вообще - Юрий где-то в форуме детально описывал технологию разбора XML - даже я понял … ;)

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 10:36
Constantine
У кларионовского парсера (и всех внешних, которые я пробовал (IQXML и т.п.)) были проблемы с Win1251... :-)
А вдруг, у Microsoft их нет? :-)

Чисто гипотетически !

Добавлено: 19 Июнь 2019, 10:38
finsoftrz
Constantine писал(а): 19 Июнь 2019, 10:25Не совсем так. Это - OLE-объект, которому можно посылать команды.
Если делать через Shell/CreateProcess, результаты можно поместить только в файл, который потом нужно будет считывать.
А таким образом можно результаты поместить сразу в переменную/queue, что может быть гораздо удобнее.
Фишка в том, что с точки зрения приложения это все скрыто в классе.

Код: Выделить всё

getCountrys_r  routine   
   DATA
lor:queue queue, pre()
lor:name   string(128), name('dt:name')
lor:guid    string(80), name('bs:guid')
  .
   CODE

  loc:err=0
  Loc:NameTmp=Loc:NameOutTmp
  Loc:NameVbsTmp=GetNameTmp(FsAccess:ActiveUserDir,'vbs',0)
  Loc:NameOutTmp=GetNameTmp(FsAccess:ActiveUserDir,'txt',0)

  fsXmlPar.init(Loc:NameTmp,Loc:NameVbsTmp,Loc:NameOutTmp)
  fsXmlPar.LoadQueue('dt:country','lor:queue',lor:queue)
  fsXmlPar.MakeScript(1)
  if fsXmlPar.ErrorCode<>0
     FsMessagePr('Ошибка! ' & clip(fsXmlPar.ErrorMessage))
     loc:err=1
  .
  fsXmlPar.kill