imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 15.11.2008, 20:15     # 1
FELARMANIA
Newbie
 
Регистрация: 08.09.2004
Сообщения: 49

FELARMANIA Путь к славе только начался
разбить по тегам xml файл 5гб

xml файл 5гб
самый простой способ не открывая его разбить по тегам на несколько мелких файлов 20-50mb


thanks for advice!!
FELARMANIA вне форума  
Старый 15.11.2008, 21:52     # 2
Bozo
Junior Member
 
Регистрация: 18.01.2002
Сообщения: 68

Bozo Известность не заставит себя ждать
Самый простой скачать Mapforce xttp://www.altova.com/products/mapforce/data_mapping.html и перегнать в БД. Тебе же его все = в базу загонять?
Bozo вне форума  
Старый 15.11.2008, 22:16     # 3
FELARMANIA
Newbie
 
Регистрация: 08.09.2004
Сообщения: 49

FELARMANIA Путь к славе только начался
есть свой импортер
только в xml много мусора, вот хотелось бы чтото типа на php на серваке запустить простенькое разделить все в тегах
<data>text</data>
по файлам
и потом подредактировать все.
и затем в базу.
FELARMANIA вне форума  
Старый 16.11.2008, 01:22     # 4
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от FELARMANIA Посмотреть сообщение
самый простой способ не открывая его разбить по тегам на несколько мелких файлов 20-50mb
Не понял, как это "не открывая разбить"??? Не открывая даже на чтение, как можно прочитать оттуда данные?

Что значит разбить по тегам?? Вам нужно получить валидные куски меньшего размера? Структура документа это позволяет? Что за XML-то?
Ну и самое главное, зачем это все? Если речь действительно идет о загрузке его потом в БД, то наверное лучше и вправду его открыть, отмапить в память, читать постепенно и загружать в БД, вот и все.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 16.11.2008, 14:26     # 5
Bozo
Junior Member
 
Регистрация: 18.01.2002
Сообщения: 68

Bozo Известность не заставит себя ждать
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Не понял, как это "не открывая разбить"???
Скорее всего он имел в виду не загружая в какой-нибудь редактор или VS или IE. Потому что IE такой объем не xml не отрисует, упадет. Да и из редакторов справятся только 2 или 3.
Bozo вне форума  
Старый 16.11.2008, 17:30     # 6
FELARMANIA
Newbie
 
Регистрация: 08.09.2004
Сообщения: 49

FELARMANIA Путь к славе только начался
ладно
мне тут на пхп накидали три строки.

а мапфорсе чтото серьёзное, пойду разбираться
FELARMANIA вне форума  
Старый 22.11.2008, 21:58     # 7
FELARMANIA
Newbie
 
Регистрация: 08.09.2004
Сообщения: 49

FELARMANIA Путь к славе только начался
пока вот возился, подкинули идейку с перлом
благо у меня сервак готов,

Код:
#!C:/Server/Perl/bin/perl.exe 
use strict;
use warnings;
no warnings 'uninitialized';

use XML::Rules;

die "Usage: $0 split_tag filename(s)\n" unless @ARGV >= 2;
my ($split_tag, @files) = @ARGV;

my $parser = XML::Rules->new(
	rules => [
		_default => 'raw',
		$split_tag => sub {
			my ($file, $id) = ( $_[4]->{parameters}{'file'}, ++$_[4]->{parameters}{'id'});
			$id = sprintf "%04d", $id;
			$file =~ s/(?:\.xml)?$/-$id.xml/i;

			if (ref $_[3]->[-1]{_content}) {
				$_[3]->[-1]{_content}[-1] =~ s/^.*(\n[^\n]+)$/$1/s;
			} else {
				$_[3]->[-1]{_content} =~ s/^.*(\n[^\n]+)$/$1/s;
			}

			print " $file\n";
			open my $FH, '>:utf8', $file or die qq{Can't create "$file": $^E\n};
			print $FH $_[4]->parentsToXML();
			print $FH $_[4]->ToXML( $_[0], $_[1]),"\n";
			print $FH $_[4]->closeParentsToXML();
			close $FH;

			return;
		}
	]
);


foreach my $file (@files) {
	$parser->parsefile( $file, {file => $file});
}
запускаем по шаблону
spliter.pl split_tag C:\filename.xml

заменяем split_tag на тег (просто слово) и данные в этом теге будут разрезаны на файлы, все будет закрыто, и без ошибок, и всего за пару секунд.

спасибо всем
FELARMANIA вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 14:56.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.