Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] xml одной строкой и весом 70mb разбить по файлам (http://forum.oszone.net/showthread.php?t=318129)

blither 24-08-2016 13:21 2662789

xml одной строкой и весом 70mb разбить по файлам
 
Здравствуйте, имеется огромный однострочный xml с которым невозможно работать!
Нужен умный кот, который сможет распинать этот xml на файлы по сегментам <conceptGrp>.....</conceptGrp>
желательно в папку рядом с файлом и чтоб на выходе были названия файлов вида 00001 - 25000 в общей сложности выйдет около 24тыс файлов.
И пожалуйста вариант как обратно склеить в одну строку все 25тыс файлов.

Elven 24-08-2016 13:49 2662803

Умный кот?

Я так понимаю каждый кусок <conceptGrp>.....</conceptGrp> должен быть в отдельном файле? Между <conceptGrp>.....</conceptGrp> и <conceptGrp>.....</conceptGrp> постоянно ничего нету или могут быть какие-то символы?

blither 24-08-2016 13:56 2662806

Elven,
Цитата:

Цитата Elven
<conceptGrp>.....</conceptGrp> должен быть в отдельном файле

так точно
Цитата:

Цитата Elven
.....</conceptGrp> и <conceptGrp>.....

ничего нет между ними

gremlintv2 24-08-2016 16:08 2662837

Может для читабельности просто заменить в notepad++
это "><", на это ">\r\n<" (предварительно включив режим поиска "расширеный")
или "</conceptGrp><conceptGrp>" на это "</conceptGrp>\r\n<conceptGrp>"?
После чего можно разбить основной файл построчно (все теги, или <conceptGrp> как удобно) батником со следующим содержимым:
Код:


@Echo Off
SetLocal enabledelayedexpansion
:: Имя исходного текстового файла
Set list=list.xml
:: Число строк в файле на выходе
Set str=4

Set Num=%str%& Set File=0
For /F "tokens=* usebackq delims=" %%i In ("%list%") Do (
        Set /a Num+=1
        If !Num! GEQ %str% (
                Set Num=0
                Set /a File+=1
                Set nFile=0!File!
                Set nFile=!nFile:~-2!
                :: Название частей текстового файла на выходе("list" можно заменить на любое)
                Echo %%i>list!nFile!.xml
        ) Else Echo %%i>>list!nFile!.xml
)
Pause
Exit

Скрипт нашел как ни странно на ютубе =): ютуб,сайт с туториалом
Цитата:

И пожалуйста вариант как обратно склеить в одну строку все 25тыс файлов.
Непонял зачем это, если есть исходник, но возможно устроит следующее решение:
Код:

copy "папка с фалами котроые нужно объединитьв один\*.xml" 1.xml

blither 24-08-2016 16:35 2662845

gremlintv2, да, было б хорошо разнести на строки и разделить этим бат файлом

conceptGrp.bat
Код:

@echo off
SetLocal EnableExtensions EnableDelayedExpansion
  Set src=in.xml
  MD out
  Set C=0
  For /F "tokens=1 delims=[]" %%? in (';find /i /n "<conceptGrp>" ^< "%src%"') do set /A C+=1& set ArrFrom.!C!=%%?
  Set C=0
  For /F "tokens=1 delims=[]" %%? in ('find /i /n "</conceptGrp>" ^< "%src%"') do set /A C+=1& set ArrUntil.!C!=%%?
 
  For /L %%? in (1,1,%C%) do call :CutLines "!ArrFrom.%%?!" "!ArrUntil.%%?!" "%src%" "out/%%?.xml"
pause
Exit /B
 
:CutLines [From] [Until] [SourceFile] [DestinationFile]
  SetLocal
  For /L %%C in (%~1, 1, %~2) do set "txtmask=!txtmask!\[%%C\] "
  (for /f "tokens=1* delims=]" %%a in ('find /v /n "" ^<"%~3"^| findstr /B "%txtmask%" 2^>nul') do Echo=%%b)> "%~4"
EndLocal& Exit /B


И увы notepad++ "Не отвечает"

Iska 24-08-2016 17:00 2662852

Цитата:

Цитата blither
имеется огромный однострочный xml с которым невозможно работать! »

Хотелось бы понять, что именно подразумевается под «невозможно работать». Поскольку есть, например, такое: Сравнение редакторов XML — Википедия.

gremlintv2 24-08-2016 17:33 2662864

Цитата:

И увы notepad++ "Не отвечает"
А может ему просто нужно время для обработки файла =) ?
Сейчас чисто из интереса запустил замену перевода строки на теги в словаре весом 200Мб. Так как гиговый словарь notepad++ отказался открывать. =(

blither 24-08-2016 17:34 2662865

Iska, стоит задача перевести этот xml, для последующего использования в качестве базы терминов, а файл слишком велик для перевода.
В этом и необходимость его резать - клеить.

gremlintv2, Iska, Ок. дождусь вечера и пусть notepad++ пилит его на строки до самого утра, и уж завтра ночью делить его на файлы, до самого утра ))))
Спасибо!

Iska 24-08-2016 21:10 2662915

Цитата:

Цитата blither
а файл слишком велик для перевода. »

Какой-нибудь online-переводчик? Он Вам xml напереводит :).


Время: 20:26.

Время: 20:26.
© OSzone.net 2001-