Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбивка на страницы 
:(
    Опции темы
korob2001
Дата 13.6.2003, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Всем доброго времени суток!
Я опять обращаюсь к вам с вопросом, который уже задавал.
Как разбить файл при выводе в браузер на страницы?
Например по 10 строк на каждую страницу, если строк в файле больше 10, создается ссылка на вторую страничку, которая будет передавать параметр скрипту. Значением параметра будет номер строки, с которой следует начать вывод.

Пожалуйста, подскажите как ето реализовать на практике, в таком простом коде, как этот?
Код

#!/usr/bin/perl -w
use strict;
my $file = "base.txt";
my $max_msg = 10;                   #Кол-во строк на странице
my $count = 1;
open(READ, "<$file") or die $!;
while (<READ>) {
   print "$_<br>";
   $count++;
}
close(READ) or die $!;

Мля sad.gif я уже несколько месяцев мучаюсь с этой проблемой. Help please!

Заранее благодарен,
Денис

Это сообщение отредактировал(а) korob2001 - 13.6.2003, 00:50


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
acp
Дата 13.6.2003, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

Репутация: нет
Всего: 2




А разве это не элементарная задача? :-?

Проверяешь, передан ли тебе этот параметр. Если нет, то приравниваешь к 0.
Перед основным циклом считываешь из файла "ненужное" количество строк.
А после основного цикла выдаёшь ссылку с параметром + твое макс. значение.

PM WWW ICQ   Вверх
HalkaR
Дата 13.6.2003, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Код
while (<READ>) {
  print "$_<br>";
  $count++;
}
Заменяешь на
Код
for($count:=1; <READ> &&  $count<(10*$n+1); $count++){
if($count>=(10*($n-1)+1))
      print "$_<br>"}


Это сообщение отредактировал(а) HalkaR - 13.6.2003, 09:24
PM MAIL   Вверх
HalkaR
Дата 13.6.2003, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



$n - это номер страницы.
PM MAIL   Вверх
korob2001
Дата 13.6.2003, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Пробую сделать так:
Код

#!/usr/bin/perl -w
use strict;
my $file = "base.txt";
my $max_msg = 10;
my $count = 1;
my $n = 0;
open(READ, "<$file") or die $!;
for($count=1; my $read = <READ> &&  $count<($max_msg*($n+1)); $count++){
   if ($count>=(10*($n-1)+1)) {
       print "$read<br>";
   }
}
close(READ) or die $!;

Выводит только <br> sad.gif

Это сообщение отредактировал(а) korob2001 - 13.6.2003, 13:33


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
HalkaR
Дата 13.6.2003, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Сколько <br> выводит? Если 10 тогда глюк в считывании.

Это сообщение отредактировал(а) HalkaR - 13.6.2003, 14:00
PM MAIL   Вверх
korob2001
Дата 13.6.2003, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Цитата

Сколько <br> выводит? Если 10 тогда глюк в считывании.

Да, 10 раз.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 13.6.2003, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Точнее выдаёт такую строку:

1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>

Это сообщение отредактировал(а) korob2001 - 13.6.2003, 14:22


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
HalkaR
Дата 13.6.2003, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Ну намудрил я! Прошу прощения. По людски все это выгллядит так.
Код
my $max_msg = 10;
my $count = 0;
my $n = 1;
open(READ, 'c:\base.txt') or die $!;
while(<READ>){
    $count++;
    if($count>=($max_msg*($n-1)+1) && $count<($max_msg*$n+1)){
             print "$_<br>\n"}}
close(READ) or die $!;
$n - это именно номер страницы - начинается с 1.
PM MAIL   Вверх
HalkaR
Дата 13.6.2003, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Цитата
$read = <READ>
Всегда считывает первую строку. А нам надо чтоб происходило перемещение.
Вот что значит не писать 3 месяца - все я позабыл, все перепутал.
PM MAIL   Вверх
korob2001
Дата 13.6.2003, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



А я только что сделал так:
Код

#!/usr/bin/perl -w

use strict;
my $file = "base.txt";
my $max_msg = 10;
my $count = 1;
my $n = 0;
open(READ, "<$file") or die $!;
for($count=$n; $count<($max_msg*($n+1)); $count++){
  if ($count>=(10*($n-1)+1)) {
      my $read = <READ>;
      print "$read<br>";
  }
}
close(READ) or die $!;

Тоже работает. Но самая главная проблема в выводе ссылок на следующие строки.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 13.6.2003, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Так уже почти получилось:
Код

#!/usr/bin/perl -w

use strict;
use CGI;
my $cgi = new CGI;
my $file = "base.txt";
my $max_msg = 10;
my $count = 1;
my $n;
if ($cgi->param('n')) {
 $n = $cgi->param('n');
} else {
 $n = 0;
}
print "Content-type: text/html\n\n";
open(READ, "<$file") or die $!;
for($count=$n; $count<($max_msg*($n+1)); $count++){
  if ($count>=(10*($n-1)+1)) {
      my $read = <READ>;
      print "$read<br>";
  }
}

      my $pag = 1;
      print "<hr>";
      print "[$pag]";
      for (my $i=1; $i<($max_msg*($n+1)); $i++) {
        my $string = <READ>;
        if ($string) {
            last unless defined $string;
            $pag++;
            next if ($i == $max_msg);
            print " <a href=\"spl.pl?n=", $pag+$max_msg-1, "\">$pag</a>";
            $max_msg += (10-1);
        }
      }

close(READ) or die $!

Но почему-то выводит 6 страниц, а должна по идее 2, так как в файле всего 15 строк. sad.gif


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 14.6.2003, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Помогите плиз!
Вот что я сам выстрадал:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
my $max_on_page = 10;
my $start_read = 0;
if ( defined $cgi->param('mess')) {
   $start_read=$cgi->param('mess');
}
my $stop_read = $start_read + $max_on_page;
my $file_url = "base.txt";
  open (READ, "<$file_url") or die $!;
     my @all_strings = <READ>;
  close(READ) or die $!;
my $total_strings = scalar( @all_strings );
my $total_pages = int( $total_strings / $max_on_page );
$total_pages++ if $total_strings % $max_on_page;
my @url;

print "Content-type: text/html\n\n";
for ( my $i=0; $i <= $total_strings; $i++ ) {
 print $all_strings[$i],"<br>" if ( ( $i >= $start_read ) && ( $i < $stop_read ) );
 push @url, "plx.pl?mess=$i" if $i == 0;
 if ( $i == $max_on_page ) {
    push @url, "plx.pl?mess=$i";
    $max_on_page += $max_on_page;
 }
}
print "<hr>";
for ( my $x = 0; $x < $total_pages; $x++ ) {
 my $getUrl = shift @url if (@url);
 print "<a href=\"",$getUrl,"\">",$x+1,"</a> ";
}

Всё работает нормально, если в файле не больше 30 строк.

Когда в файле скажем 38 строк, то как и положено выводится 4 ссылка, но при этом она не хочет передавать параметр.

А если в файле 40 строк, ссылка передаёт параметр, но не выводит ни одной строки при клике на неё.

Помогите понять! Почему?

Заранее благодарен,
Денис.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
HalkaR
Дата 14.6.2003, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



$max_on_page += $max_on_page; вот ошибка когда $max_on_page = 20 работает неправильно!
замени на $max_on_page += 10;
PM MAIL   Вверх
korob2001
Дата 14.6.2003, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



To HalkaR

Большое спасибо! Уже работает.
Мне интересно знать твоё мнение, такой вариант нормальный? А то мне кажется что он слишком большой.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.