Страница 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:43finsoftrz писал(а): 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