Вверх ↑
Ответов: 786
Рейтинг: 168
#1: 2023-10-27 11:20:06 ЛС | профиль | цитата
Udokanec писал(а):
Возникла потребность разбить большой текстовый файл на блоки по 100 мегабайт.

Текстовые файлы такого размера (более 500 мб) надо ещё умудрится найти.
Самый большой текстовый файл на моём компьютере – 44,3 мб.
Я так понимаю, что разбивать на блоки нужно кратно строкам?
т.е. не должно разделение проходить посередине какой-либо строки. Это так?
Какая кодировка текстового файла?
Какой символ (\n,\r,\0,\x….) окончания строк в текстовом файле?

Вот пример, разбивает текстовый файл в кодировке windows-1251, символ окончания строк - \r\n
На блоки по 100000 строк. Файл размером 44,3 мб разбивается на 13 частей около секунды.

Add(MainForm,2953706,91,119)
{
link(onCreate,11686953:doExecute,[])
}
Add(SearchInFile,9662796,245,168)
{
Point(onEnd)
link(onSearch,4816464:doEvent1,[])
link(onEnd,5023708:doEvent1,[(291,188)(291,202)])
}
Add(StrList,2538747,511,119)
{
Point(doSave)
}
Add(Hub,4816464,301,175)
{
link(onEvent1,2538747:doAdd,[(326,181)(326,125)])
link(onEvent2,8468968:doCompare,[])
}
Add(ODialog,11686953,147,133)
{
link(onExecute,1753085:doEvent1,[])
}
Add(Hub,1753085,203,133)
{
link(onEvent1,7528886:doPart,[])
link(onEvent2,9662796:doSearch,[(235,146)(235,174)])
}
Add(FilePartElm,7528886,413,133)
{
Mode=2
Point(Part)
}
Add(If_else,8468968,518,182)
{
Op2=Integer(100000)
link(onTrue,6933531:doWork3,[(557,188)(557,237)(340,237)])
link(Op1,2538747:Count,[])
AddHint(164,-94,51,13,Op2)
}
Add(CounterEx,10334408,357,196)
{
link(onNext,6113435:doString,[])
}
Add(FormatStr,6113435,413,196)
{
Mask="%1.part-%2"
link(onFString,4409398:doEvent1,[(458,202)(458,153)])
link(Str1,7528886:Part,[])
}
Add(Hub,4409398,476,147)
{
link(onEvent1,2538747:doSave,[])
link(onEvent2,2538747:doClear,[(501,160)(501,132)])
}
Add(HubEx,6933531,336,196)
{
link(onEvent,10334408:doNext,[])
}
Add(Hub,5023708,301,196)
{
link(onEvent1,6933531:doWork2,[])
link(onEvent2,2953706:doClose,[(329,209)(329,236)(81,236)(81,146)])
}

карма: 15

0