
08.11.2013, 20:31
|
|
Member
Регистрация: 24.06.2013
Сообщений: 22
С нами:
6782006
Репутация:
5
|
|
Сообщение от n0vice
парни, а чем порезать словарь на куски по размеру? у меня примерно гигабайт в час проверяет, было бы хорошо большие словари разразать гигов на 10, чтоб в случае сбоя не начинать все заново.
вот написал на коленке, может кому пригодится.
Читает и записывает пока не упрется в максимальный размер словаря, тестил 5,6гб полет норм.
Код:
= 1073741824)
return sprintf('%.2f', $s / 1073741824).' GiB';
else if ($s >= 1048576)
return sprintf('%.2f', $s / 1048576).' MiB';
else if ($s >= 1024)
return sprintf('%.2f', $s / 1024).' KiB';
else return $s.' bytes';
}
function write() {
$file = dirname($GLOBALS['dic']).'/'.basename($GLOBALS['dic']).$GLOBALS['i'];
$GLOBALS['writeCount'] += strlen($GLOBALS['data']);
echo 'Writing: '.basename($file).' - '.formatsize($GLOBALS['writeCount']).chr(10);
$fp = fopen($file,'a');
fwrite($fp,$GLOBALS['data']);
fclose($fp);
unset($GLOBALS['data']);
$GLOBALS['data'] = '';
if ($GLOBALS['writeCount']>=$GLOBALS['splitSize']) {
$GLOBALS['writeCount'] = 0;
++$GLOBALS['i'];
}
}
$dic = './split/test.txt'; // Словарь
$buffSize = 1024*1024*150; // Сколько читать в буфер
$splitSize = 1024*1024*1024; // Максимальный вес словаря
$i = $writeCount = 0;
$data = $end = '';
$fp = fopen($dic,'r');
while(!feof($fp)) {
$data .= fread($fp,$buffSize);
echo 'Read: '.formatsize(strlen($data)).chr(10);
if (substr($data,-1) <> "\n") {
do {
$end = fgetc($fp);
if ($end !== false) $data .= $end;
if ($end == "\n" || $end === false) {
write();
$end = '';
break;
}
} while ($end <> "\n");
} else write();
}
fclose($fp);
echo 'Done!';
?>
или
Код:
split -C размер_в_байтах словарь
|
|
|