Войти

Показать полную графическую версию : [решено] xml одной строкой и весом 70mb разбить по файлам


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

Elven
24-08-2016, 13:49
https://otvet.imgsmail.ru/download/218443777_0e44a34f71a96226d1e43c586b27a6d5_800.jpg
Я так понимаю каждый кусок <conceptGrp>.....</conceptGrp> должен быть в отдельном файле? Между <conceptGrp>.....</conceptGrp> и <conceptGrp>.....</conceptGrp> постоянно ничего нету или могут быть какие-то символы?

blither
24-08-2016, 13:56
Elven,
<conceptGrp>.....</conceptGrp> должен быть в отдельном файле
так точно
.....</conceptGrp> и <conceptGrp>.....
ничего нет между ними

gremlintv2
24-08-2016, 16:08
Может для читабельности просто заменить в 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
Скрипт нашел как ни странно на ютубе =): ютуб (https://www.youtube.com/watch?v=p_jFtFwhwZI),сайт с туториалом (http://free-war.net/video-tutorial/527838-kak-razbit-tekstovyy-fayl-na-chasti-po-strokam.html)
И пожалуйста вариант как обратно склеить в одну строку все 25тыс файлов.
Непонял зачем это, если есть исходник, но возможно устроит следующее решение:
copy "папка с фалами котроые нужно объединитьв один\*.xml" 1.xml

blither
24-08-2016, 16:35
gremlintv2, да, было б хорошо разнести на строки и разделить этим бат файлом

@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
имеется огромный однострочный xml с которым невозможно работать! »
Хотелось бы понять, что именно подразумевается под «невозможно работать». Поскольку есть, например, такое: Сравнение редакторов XML — Википедия (https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1 %80%D0%BE%D0%B2_XML).

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

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

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

Iska
24-08-2016, 21:10
а файл слишком велик для перевода. »
Какой-нибудь online-переводчик? Он Вам xml напереводит :).




© OSzone.net 2001-2012