Показать сообщение отдельно

  #246  
Старый 08.11.2013, 20:31
SmartBHT
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 размер_в_байтах словарь
 
Ответить с цитированием