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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

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

loc:ok=SELF.StartProcess('wscript ' & clip(SELF.FileNameScript))
C6/C11, ШВС, tps/btrieve.
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

А как это по скорости?
Пробовал ли кто распарсить серьезный файл, мегабайт на 100?
Сколько занимает по времени?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

finsoftrz писал(а): 19 Июнь 2019, 9:34В реальной жизни парсинг xml не должен быть чем-то, на что надо тратить много времени.
Вы даже не представляете, как я с Вами согласен в этом вопросе ! :)
Но, блин, реалии далеки от этого, причём независимо от выбора конкретной технологии парсинга XML … :(
За теми кто отстал - не возвращаться. (С) Кодекс
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

finsoftrz писал(а): 19 Июнь 2019, 9:39loc:ok=SELF.StartProcess('wscript ' & clip(SELF.FileNameScript))
Ага!
Т.е., все-таки, через Shell...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Constantine писал(а): 19 Июнь 2019, 9:41Пробовал ли кто распарсить серьезный файл, мегабайт на 100?
Вопрос не корректный. Скорость парсинга XML документа очень сильно зависит от его структуры.
Одно дело залить линейный список и совсем другое выковыривать 6-ой аттрибут в 7-ом уровне вложенности тегов. :(
Последний раз редактировалось Игорь Столяров 19 Июнь 2019, 9:48, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

Это верно.
Но, при таких размерах, хотелось бы просто получить некое общее представление.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Constantine писал(а): 19 Июнь 2019, 9:43
finsoftrz писал(а): 19 Июнь 2019, 9:39loc:ok=SELF.StartProcess('wscript ' & clip(SELF.FileNameScript))
Ага!
Т.е., все-таки, через Shell...
Через win api CreateProcess.
C6/C11, ШВС, tps/btrieve.
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

finsoftrz писал(а): 19 Июнь 2019, 9:48ерез win api CreateProcess.
Спасибо, понятно. Это, примерно, одно и то же.
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

Наткнулся на примерчик парсинга через OLE (MSXML2.DOMDocument): http://www.script-coding.com/XMLDOMscripts.html
А так кто-нибудь пробовал?
По-моему, должно быть быстрее, чем через файл.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

Если чисто теоретически - последний раз разбирал XML( SCORM 2004 manifest) питоноскриптом - пакетом xmltodict https://pypi.org/project/xmltodict/, потом можно и в JSON одной строкой выгрузить. Если через файл или входной-выходной поток - удобно... Правда, этот прожект с Кларионом слабо связан.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

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

Сообщение Constantine »

Не совсем так. Это - OLE-объект, которому можно посылать команды.
Если делать через Shell/CreateProcess, результаты можно поместить только в файл, который потом нужно будет считывать.
А таким образом можно результаты поместить сразу в переменную/queue, что может быть гораздо удобнее.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

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

Сообщение Constantine »

У кларионовского парсера (и всех внешних, которые я пробовал (IQXML и т.п.)) были проблемы с Win1251... :-)
А вдруг, у Microsoft их нет? :-)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение 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
C6/C11, ШВС, tps/btrieve.
Ответить