Мне нужно разделить большой файл на куски. Поскольку мой размер файла больше (50 ГБ), мне нужно разделить на более крупные куски

#include<iostream>
#include<fstream>
#define BUFFER_SIZE 11788889

using namespace std;

int main()
{
ifstream infile("hello.txt");
unsigned char buffer[BUFFER_SIZE];
int read_file_position=infile.tellg();
cout<<"input file position"<<read_file_position<<endl;
while(infile.read((char *)buffer,BUFFER_SIZE))
{
read_file_position=infile.tellg();
cout<<"input file position"<<read_file_position<<endl;

}
}

то, что я пробовал, разбивает мой файл только на куски байтов .. разделение на МБ или ГБ было бы здорово .. если есть способ разделить его на большие куски, это было бы полезно … также, поскольку мои записи не имеют фиксированной длины поэтому размер куска будет меняться.

0

Решение

Если вы хотите прочитать данные по частям, а затем передать их нескольким потокам, сделайте следующее

void *pManyChunks = malloc( NUM_THREADS * sizeof(YourRecord) );

while( not end of file )
{
read sizeof(YourRecord)*NUM_THREADS bytes to pManuChunks

pass (YourRecord*)((char*)pManuChunks + sizeof(YourThread)*0) pointer and sizeof(YourRecord) to first thread
pass (YourRecord*)((char*)pManuChunks + sizeof(YourThread)*1) and sizeof(YourRecord) to second thread
pass (YourRecord*)((char*)pManuChunks + sizeof(YourThread)*2) and sizeof(YourRecord) to third thread
etc
}
0

Другие решения

да, но так как у меня есть файл большего размера, я не хочу записывать его в другой файл и тратить время …

У меня есть такие записи ..

ID:1002:: TP://reports/timing_report1.txt::TPS:counter/ffa::TPE: counter/ffd:: PGR: CLK::PTY:max::SL:-0.48::LAY:M2:: SEL::SLLT:1.0:: PTY:ANY::LAY:M1&M2:: PRG:ANY:: CELL:ANY:: REG:ANY
ID:1003:: TP://reports/timing_report1.txt::TPS:counter/ffb::TPE: counter/ffc:: PGR:CLK:: PTY:max::SL:-0.3::LAY:M1:: SEL::SLLT:1.0:: PTY:ANY::LAY: M1&M2:: PRG:ANY:: CELL:ANY:: REG:ANY

теперь, если я хочу разделить на куски … я не хочу, чтобы кусок содержал половину записи … поэтому я хочу, чтобы кусок имел полную запись … что если я делю на 2 половины, то я не хочу запись в b разделить на половину. поэтому мне нужно найти следующее вхождение идентификатора и добавить предыдущую половину в предыдущий фрагмент n из следующего идентификатора в этом фрагменте

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector