while (!feof($fp)){
$a++;
$mytext = '';
$i = 0;
while($i<1100){
$i++;
$gy = fgetc($fp);
$myc .= $gy;
if ($gy == ".") {
$mytext .= $myc;
$myc = '';
}
}
$save_file = "books/".$_POST['num']."_".$a.".php";
$fopa = fopen($save_file, "w");
fwrite($fopa, $mytext);
fclose ($fopa);
echo '<br> Page '.$a.' is true!';
}
Итак, нужно разделить один файл на несколько. Конкретно дан .txt. Текст нужно разделить на примерно равные части по принципу "не больше 1100 символов, но до точки". Вот только в моём случае почему-то встречаются на выходе файлы, имеющие и по 1300 символов, чего быть вообще не должно. Почему так происходит? Как это исправить? Может кто видит? :unsure:
Спустя 30 минут, 24 секунды (1.12.2010 - 04:28) dr_Lev написал(а):
если исходный файл не большой, то можно и так :
$text = file_get_contents($fileName);
$texts = explode('.',$text);
$i = 0;
$newText = '';
foreach($texts as $text){
if ((strlen($text) + strlen($newText))>=1100){
$save_file = "books/".$_POST['num']."_".$i.".php";
file_put_contents($save_file, $newText);
$newText = $text.'.';
$i++;
}else{
$newText.= $text.'.';
}
}
Спустя 30 минут, 23 секунды (1.12.2010 - 04:58) Crater написал(а):
dr_Lev
хм, неплохо. файл может варьироваться от 1000 символов до... ну, до целого тома. Но всё же едва ли больше метра займёт. Сейчас попробую.
хм, неплохо. файл может варьироваться от 1000 символов до... ну, до целого тома. Но всё же едва ли больше метра займёт. Сейчас попробую.
Спустя 10 минут, 6 секунд (1.12.2010 - 05:09) kirik написал(а):
Цитата (Crater @ 30.11.2010 - 20:58) |
файл может варьироваться от 1000 символов до... ну, до целого тома. |
file_get_contents тогда не пойдет.. памяти не хватит на целый том

Спустя 13 минут, 11 секунд (1.12.2010 - 05:22) Crater написал(а):
kirik
Да, про это слышал. Но 45 кб текстик разбил на ура. 46 страниц вышло. В принципе, тома можно и на части делить. Страницы всё равно по 1100 символов, а это тысяча страниц на том... Словом, с любой стороны неудобно.
dr_Lev
Спасибо, дружище! Дай расцелую
Работает. И по моим прикидкам даже порезвее прежнего. Единственное - пришлось добавить так нравящееся мне Page '.$a.' is true!
Да, про это слышал. Но 45 кб текстик разбил на ура. 46 страниц вышло. В принципе, тома можно и на части делить. Страницы всё равно по 1100 символов, а это тысяча страниц на том... Словом, с любой стороны неудобно.
dr_Lev
Спасибо, дружище! Дай расцелую


Спустя 1 день, 2 часа, 26 минут, 46 секунд (2.12.2010 - 07:49) Crater написал(а):
Поторопился я с выводами. Если интересно, сколько может прочесть этот скрипт - как раз чуть больше 40 кб. Для кода самое оно. Для книги совсем немного. Придётся дорабатывать, чтобы можно было удобно в два шага загружать.
Спустя 1 час, 20 минут, 12 секунд (2.12.2010 - 09:09) kirik написал(а):
Цитата (Crater @ 1.12.2010 - 23:49) |
Для книги совсем немного. Придётся дорабатывать, чтобы можно было удобно в два шага загружать. |
Вытаскивай просто с помощью fgets куски по 1100 байт и обрезай до последней точки. А оставшийся кусок сохраняй во временную переменную и присоединяй к следующему куску.
Спустя 11 часов, 59 минут, 49 секунд (2.12.2010 - 21:09) Crater написал(а):
Я снова поторопился с вводамии. Внимательно посмотрел и увидел, что если последняя страница не достигает нужного размера (а на то она и последняя, что его не достигает), то она не записывается. А я решил, что это скрипт обрывается. В общем спать мне больше надо

_____________