@CityzenUNDEAD

Как обработать 10гб текстовый файл?

Доброго дня!
Уже 2й день пытаюсь найти варианты как можно обработать огромный текстовый файл.
Суть задачи такова:
Мне приходит огромный текстовый xml файл размером около 10гб
Файл имеет такую структуру:
<organization typeof="Organization" about="http://opendata.trudvsem.ru/7710538364-organizations/organizations.xml#315910200403678">
		<region rel="dc:references" resource="http://opendata.trudvsem.ru/7710538364-regions/regions.xml#9100000000000"/>
		<name property="name">АЛИМЕНКО ДМИТРИЙ НИКОЛАЕВИЧ</name>
		<creationDate>2022-03-05</creationDate>
		<legalName>АЛИМЕНКО ДМИТРИЙ НИКОЛАЕВИЧ</legalName>
		<companyStructureHidden>false</companyStructureHidden>
		<ogrn>315910200403678</ogrn>
		<inn>910504080415</inn>
		<addressCode>9100000000000</addressCode>
		<firstRateCompany>Не относится к крупнейшим компаниям</firstRateCompany>
		<businessSize>SMALL</businessSize>
		<source>EMPLOYMENT_SERVICE</source>
		<innerInfo>
			<codeExternalSystem>CZN</codeExternalSystem>
			<dateModify>2022-03-13</dateModify>
			<deleted>false</deleted>
			<isModerated>true</isModerated>
			<moderationTime>2022-03-13</moderationTime>
			<registrationStatus>Получена по интеграции</registrationStatus>
			<status>Одобрено</status>
			<disableImportInfo>false</disableImportInfo>
			<disableImportVacancy>false</disableImportVacancy>
			<disableJoinCompany>false</disableJoinCompany>
			<disableJoinManager>false</disableJoinManager>
		</innerInfo>
	</organization>
<organization>
...
</organization>

То есть в этом файле перечислено огромное кол-во организаций.
Мне нужно обработать этот файл, и реализовать что бы каждая организация находилась в отдельном файле.
То есть разделить этот огромный файл на большое число небольших файлов.
Сложность заключается в том, что обрабатывать этот файл целиком не получается.
Нужно как-нибудь считывать этот файл кусками, то есть прочел кусок, записал в файл, читаю след. кусок.

Вопрос - есть ли возможность прочитать файл только до первого попавшегося текста </organization>, выделить этот кусок данных записать в файл, и с остановившегося места продолжать читать дальше?
Может быть есть другие варианты решения задачи, но пока додумался только до описанного выше, то есть что бы в памяти процесса держались только небольшие обрабатываемые куски данных. Только я не знаю как это реализовать.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@rPman
2 варианта
правильный сложный - гуглить: stream xml parser c#
первый же результат

второй простой и тупой - если тег organization это один из элементов огромного списка и файл отформатирован (а это можно сделать другими средствами потоково, например консольным редактором регуляркой sed, вставив переводы на новую строку после закрытия тега organisation или же в своей программе) то можно быстрыми средствами поиском подстроки или построчной загрузкой файла грузить каждую organization в свою строку и анализировать уже привычными не потоковыми парсерами
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы