Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 09:40   #1
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию XML в 500 мб

Доброго времени суток.
Подскажите может кто уже решал проблему.
У меня есть документ (база) в xml размером 500 мегабайт.
мне надо её загрузить в firebird.
Парсер я написал на основе XMLDocument, но когда он пытается его открыть... он забирает 3,5 гига оперативки и говорит не хватило оперативной памяти для операции.
Может подскажете другой компонент который сможет прогрузить такое?
стуктура

Код:
<RECLIST FILENAME="K72001_000_05121.xml" VERS="2.0" SMOCOD="72001" NRECORDS="919500">
 <REC ID="313">
  <PERSON C_OKSM="RUS" DR="1926-03-21" FAM="" IM="" OT="" SS="" TRUE_DR="1" W="2" /> 
  <DOC DOCDATE="2002-04-11" DOCNUM="447724" DOCSER="" DOCTYPE="14" MR="" NAME_VP="" /> 
  <ADDRES_G BOMG="0" DOM="52" INDX="625000" KORP="" KV="17" NPNAME="С АРМИЗОНСКОЕ" OKATO="71401000000" RNNAME="" SUBJ="71000" UL="УЛ ПАРХОМЕНКО" /> 
  <ADDRES_P DOM="52" INDX="625000" KORP="" KV="17" NPNAME="" OKATO="71401000000" RNNAME="" SUBJ="71000" UL="УЛ ПАРХОМЕНКО" /> 
 <INSURANCE ENP="7276370878000016" ERP="0" OGRNSMO="1038600541517" TER_ST="">
  <POLIS DBEG="2011-08-01" DEND="2011-09-12" DSTOP="2011-10-02" NPOLIS="001091634" SPOLIS="" VPOLIS="2" /> 
  <POLIS DBEG="2011-10-03" DEND="" DSTOP="" NPOLIS="01014855941" SPOLIS="" VPOLIS="3" /> 
  </INSURANCE>
  </REC>
 <REC ID="491">
  <PERSON C_OKSM="RUS" DR="1933-07-08" FAM="" IM="" OT="" SS="105-892-074 62" TRUE_DR="1" W="1" /> 
  <DOC DOCDATE="2001-12-26" DOCNUM="" DOCSER="" DOCTYPE="14" MR="" NAME_VP="ОВД АРМИЗОНСКОГО Р-НА ТЮМ.ОБЛ." /> 
  <ADDRES_G BOMG="0" DOM="9" INDX="625007" KORP="" KV="45" NPNAME="С АРМИЗОНСКОЕ" OKATO="71401000000" RNNAME="" SUBJ="71000" UL="УЛ ВАЛЕРИИ ГНАРОВСКОЙ" /> 
  <ADDRES_P DOM="" INDX="" KORP="" KV="" NPNAME="" OKATO="" RNNAME="" SUBJ="" UL="" /> 
 <INSURANCE ENP="7272660841000018" ERP="0" OGRNSMO="1038600541517" TER_ST="71000">
  <POLIS DBEG="2012-01-20" DEND="2012-03-05" DSTOP="2012-02-16" NPOLIS="001006220" SPOLIS="" VPOLIS="2" /> 
  <POLIS DBEG="2012-02-17" DEND="" DSTOP="" NPOLIS="01023429328" SPOLIS="" VPOLIS="3" /> 
  </INSURANCE>
  </REC>
</RECLIST>
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 08.05.2012 в 12:15.
BARNEY вне форума Ответить с цитированием
Старый 08.05.2012, 10:36   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

нашёл код...как резать файлы может подскажите как им воспользовать?
Код:
$str = file_get_contents("d:/filename.txt");  

$pos = stripos($str, "<Queue>");  
$header = substr($str, 0, $pos);  

$ar = array();  

// режем на части  
while($pos=stripos($str, "<Server>", $pos)){  
    $end = stripos($str, "</Server>", $pos);  
    $ar[] = substr($str, $pos, $end - $pos + 9);  
    $pos = $end;  
} // end while  

print "Найдено <b>".count($ar)."</b> блоков<br>\n";  


// делаем файлы  
for($i=0; $i<count($ar); $i++){  
    $res = $header.$ar[$i]."\n</Queue>\n</FileZilla3>";  
    file_put_contents("d:/file$i.txt", $res);  
    //print ($i+1)." <pre>".htmlspecialchars($ar[$i])."</pre><hr>\n";  
} // for $i
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 08.05.2012 в 10:38.
BARNEY вне форума Ответить с цитированием
Старый 08.05.2012, 10:52   #3
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Как вы грузите в XMLDocument?
=master= вне форума Ответить с цитированием
Старый 08.05.2012, 11:16   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
Xmldoc:=TXMLDocument.Create(nil);
  Xmldoc.Active:=True;
  Xmldoc.LoadFromFile('C:\base.xml');
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 08.05.2012, 11:19   #5
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Понятно. Xmldoc надеюсь интерфейсный тип..

Попробуйте этим парсером http://saxforpascal.sourceforge.net/
=master= вне форума Ответить с цитированием
Старый 08.05.2012, 11:29   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

да забыл
Код:
var
Xmldoc:IXMLDocument;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 08.05.2012, 12:01   #7
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Проблема решена..разрубил на части php
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 08.05.2012 в 21:49.
BARNEY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
плачу 500 р за прогу alexey_nv86 C++ Builder 4 08.11.2011 17:20
500 руб. a.n.o.n.i.m Фриланс 3 12.03.2011 07:20
сформировать xml-файл на основе другого xml-файла NieL Общие вопросы Delphi 2 21.12.2010 15:49
парсер XML, не видит XML тэги supercelt PHP 3 02.11.2009 19:18
ImageList1.Draw(Canvas,500,500,n); KAMASUTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 12.08.2007 01:44