На страницу Пред. 1, 2 |
|
Пн Май 11, 2009 9:49 pm |
Start Post: php, недо-дорген, как ему вытащить текстовую переменную  |
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
Yabuti |
Ответить с цитатой | | |
|
Приветствую!
Ребят, кому не сложно, подскажите, что я неправильно делаю.
мини-ТЗ:
1) Есть дорген, генерящий доры, в которых текст идет без смысла - отрезанный кусок слов.
2) Хочу исправить этот момент - берется книжка в TXT, с абзацами и переносами, в общем, нормальная такая книжка. И нужно, чтобы дорген отрезал часть из книги, скажем, 10 Кб, и прямиком, со всем форматированием (абзацы и переносы) - вставлял в генерируемую страницу.
Посмотрите, вот код который сейчас:
Код: |
/* generate pages */
reset($p);
@mkdir('./out/dimg',0777);
$tfp = @fopen('./db/[B]sample.txt'[/B],'r') or print('Cannot open ./db/sample.txt ... ignoring {TEXT} <br>');
while(list($k,$v)=each($p)) {
$k++;
$name=trim(translate($v));
$tpl_out=str_replace('{TITLE}',$v,$tpl);
$tpl_out=str_replace('{KEYWORDS}',ereg_replace("(\r\n|\n|\r)","",$keywords),$tpl_out);
$tpl_out=str_replace('{DESC}',ereg_replace("(\r\n|\n|\r)","",implode(' ',$keys)),$tpl_out);
$tpl_out=str_replace('{LINK}',$l,$tpl_out);
$tpl_out=str_replace('{I}',$k,$tpl_out);
$tpl_out=str_replace('{ENTER}',trim($_POST['enter']),$tpl_out);
@copy('./db/sample.gif','./out/dimg/'.$name.'.gif');
@copy('./db/sample.gif','./out/dimg/'.$name.'.jpg');
$tpl_out=str_replace('{IMG}',$name,$tpl_out);
//----- ЭТОТ КУСОК МЕНЯ УБИВАЕТ - НЕ ХОЧЕТ БРАТЬ НОМАЛЬНЫЙ ТЕКСТ -----
if ($tfp) {
$buffer=''; $str='';
if (feof($tfp)) {fseek($tfp,0);}
while(trim($str) == '' && $buffer=='') {
$str = trim(fgets($tfp, 4096));
if ($str) {$buffer.=$str;}
if (feof($tfp)) {fseek($tfp,0);}
}
$tpl_out=str_replace('{TEXT}',$buffer,$tpl_out);
// ----- КОНЕЦ КУСОЧКА ----- КОНЕЦ КУСОЧКА ----- КОНЕЦ КУСОЧКА -----
}
$fp=fopen('./out/'.$name.'.html','w');
fwrite($fp,$tpl_out);
fclose($fp);
print 'Создание страниц(ы) успешно завершено. Результат: '.$name.'.html?lt;br>';
flush();
}
if ($tfp) {fclose($tfp);}
|
Проблему выделил жирным шрифтом - и ставил размер буфера не 4 Кб, а больше, но дорген тупо берет только первую строку (до End of String) и все, дальше не берет.
Буду очень благодарен, кто посоветует, что здесь не так. Или может по-другому сделать.
Как модифицирую - выложу в свободный доступ.
Спасибо! |
|
|
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
Yabuti |
Ответить с цитатой | | |
|
Точно, я подумал сначала, что мы здесь вдвоем обсуждаем, а тут Creator пришел и решил проблему!
Ребята, огромное Вам обоим спасибо, не знаю, что бы я делал без Вашей поддержки, да и без Армады вообще..  |
|
|
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
![]() creator123 Гуру |
Зарегистрирован: 25.07.2007
Сообщений: 1145
|
Обратиться по нику
|
|
|
<----- если понравился пост, жмакай сюды <----- |
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
Yabuti |
Ответить с цитатой | | |
|
Да, там сам черт ногу сломит =) Но работает! Это вообще мое первое программирование под реальные задачи, до этого только в универе два года назад кодили под теорию, вроде получается, конечно, с Вашей помощью =)) |
|
|
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
![]() kaptmeh + Опытный |
Зарегистрирован: 27.02.2009
Сообщений: 102
|
Обратиться по нику
|
kaptmeh + |
Ответить с цитатой | | |
|
Ну ты все таки найди функцию которая читайет определенное кол-во значений из файла, т.к. если ты будеш реализовывать свой сплоггер, и он у тебя скушает авишку в формате txt то мало тебе не покажеться.
ЗЫ Ещё на всякий случай комментируй свой код, самому понятнее будет, и выполняй одну операцию на одной строке (тобиш конструкций вида if(a>b)a=b не было. |
|
|
|
|
|
Code monkey  |
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
Yabuti |
Ответить с цитатой | | |
|
kaptmeh, хорошо, спасибо, что напомнил. Вроде та функция, которой заменил участок индийского кода, у нее есть доп. параметры - смещение и объем того, сколько брать - в сплог-бандит добавлю обязательно.
kaptmeh, ты случайно не знаешь, как можно разбить TXT-файл на куски с заданным количеством строк? Не попадалась на С такая программа? |
|
|
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
![]() Puika Свой |
Зарегистрирован: 03.04.2008
Сообщений: 49
|
Обратиться по нику
|
Puika |
Ответить с цитатой | | |
|
<?php
// Создаем функцию с 2-мя обязательными
// и одним новым необязательным параметром
// с уже указанным значением по умолчанию
function separator($file, $notes, $limit=0){
// Загоняем всю инфу из файла в массив
$file = file($file);
// Получаем количество строк в файле
$q = sizeof($file);
// Делим кол-во строк на кол-во записей - получаем кол-во страниц
// ! Если число не делится ровно, оно округлится по верхней границе (с избытком)
// Для этого существует функция ceil()
// В дальнейшем нам не нужно ставить (int) перед переменной
$np = ceil($q/$notes);
// Если в адресной строке есть $page, значит
//нужно показать блок, соответсвующий значению $page
if(isset($_GET['page']))
{
// Для удобства переименуем $_GET['page'] в $page
$page = $_GET['page'];
// Если $page больше, чем кол-во страниц, показываем последний блок
if($page > $np) $page = $np;
// Если вдруг значение $page отрицательно - выводим первый блок
if($page <= 0) $page = 1;
// Формулы начальной и конечной строки блока, вычислены опытнам путем
$begin = $notes*($page-1);
$end = $notes*$page-1;
// Вывод данных
for($i=$begin; $i<=$end; $i++)
{
if(isset($file[$i])) echo $file[$i].'<br>';
}
}
// Если $page в адресной строке нет, то показываем 1-й блок
else
{
// Если количество строк в файле меньше или равно допустимому
// количеству, то просто выводим их и не паримся с постраничным
// выводом, ибо нефига...
if($q <= $notes)
{
for($i=0; $i<$q; $i++) {
echo $file[$i].'<br>';
}
// Дальнейшее выполнение функции бессмыслено (все возможное выведено), поэтому выходим
exit;
}
// А если больше, то выводим первый блок
else
{
for($i=0; $i<$notes; $i++)
{
echo $file[$i].'<br>';
}
}
}
// Вывод навигации
// Делаем пробел между выводимой информацией
// и навигацией
echo '<br>';
// Если страница не первая (иначе нет смысла выводить
// стрелки), то выводим стрелки "В начало" и "Предыдущая"
if(isset($_GET['page']) && $_GET['page'] > 1){
// Будет вернее писать $_SERVER['SCRIPT_NAME'], а не index.php, как было раньше
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page=1><<</a> ';
$prev = $_GET['page']-1;
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$prev.'><</a> ';
}
// Если параметр, ограничивающий длину выводимой
// навигации не установлен или равен нулю, то выводим
// навигацию как обычно
if($limit == '0'){
for($i=0; $i<$np; $i++){
if(isset($_GET['page']) && $_GET['page'] == $i+1) echo '['.($i+1).'/'.$np.']';
else echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.($i+1).'>['.($i+1).']</a> ';
}
}else{
// Самое интересное: ограничение выводимой навгиации
if(!isset($_GET['page'])) $page=1;
// Форумла начала "обрезанной" навигации (НОН)
$begin = $page-$limit;
// Формула конца "обрезанной" навигации (КОН)
$end = $page+$limit;
// Если НОН выходит за ноль, то можно не "обрезать" навигацию слева
if($begin <= 0) $begin = 1;
// Если КОН выходит за последнюю страницу, то можно не "орбезать" навигацию справа
if($end > $np) $end = $np;
// Если между 1-й страницей и НОН есть какие-то страницы, заменяем их на "..."
if($begin > 1) echo "...";
//Ну и сам вывод...
for($i=$begin; $i<=$end; $i++){
if(isset($_GET['page']) && $_GET['page'] == $i) echo '['.$i.'/'.$np.']';
else echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$i.'>['.$i.']</a> ';
}
// Если между КОН и последней страницей есть какие-то страницы, заменяем их на "..."
if($end < $np) echo "...";
}
// Вывод стрелок "Следующая" и "В конец"
if(@$_GET['page'] < $np){
$next = @$_GET['page']+1;
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$next.'>></a> ';
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$np.'>>></a> ';
}
}
// Ну и вызов функции
separator('file.txt', '10');
?>
Настройки скрипта внизу кода:
file.txt - неопсредственно текстовый файл для обработки.
тут '10' - число строк на странице.
Скрипт не мой, по случаю нашел |
|
|
|
|
|
|
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
![]() Puika Свой |
Зарегистрирован: 03.04.2008
Сообщений: 49
|
Обратиться по нику
|
Puika |
Ответить с цитатой | | |
|
Yabuti писал(а): |
Сам скрипт как доделаю до человеческого вида - тоже выложу.
|
Как скоро... |
|
|
|
|
|
|
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
Yabuti |
Ответить с цитатой | | |
|
Puika писал(а): |
Yabuti писал(а): |
Сам скрипт как доделаю до человеческого вида - тоже выложу.
|
Как скоро...
|
Ориентировочное время - сегодня, Ночь, полнолуние
Значит, такая сборка:
1) Простой дорген, переделанный в генератор страниц - можно задать кейворд(ы), тайтл, в папку положить нужную страницу с текстом - создасться оптимизированная под ваш кей страничка, которую не стыдно дать читать юзерам =);
2) Программа для резки больших файлов на равные части (главы книг, например).
А скрипт, который Вы выложили - уже работает - здесь:
Как стать успешным пикапером  |
|
|
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
![]() Puika Свой |
Зарегистрирован: 03.04.2008
Сообщений: 49
|
Обратиться по нику
|
|
|
|
![]() kaptmeh + Опытный |
Зарегистрирован: 27.02.2009
Сообщений: 102
|
Обратиться по нику
|
kaptmeh + |
Ответить с цитатой | | |
|
Yabuti, Мне много всяких задач встречалась, даже компилятор писал (ну это был курсач но все таки) так что если нужно совет то обращайся, если хочеш стучи в личуку асю дам |
|
|
|
|
|
Code monkey  |
![]() Yabuti V.I.P. |
Зарегистрирован: 28.11.2008
Сообщений: 16263
|
Обратиться по нику
|
|
|
Ксен ВПС и выделенные серверы от PQCService.net с бесплатным администрированием в 7 локациях, icq: 87244588
-- |
|
|
Партнеры
|