Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Постраничная навигация на файлах
 
 автор: sasha   (12.10.2005 в 18:04)   письмо автору
 
 

Здрасвуйте.
Возможно ли решить следующую проблему:
Есть текстовый файл file.txt нужно прочитать из него первые 10 строк и отобразить построчно, потом считать второй 10-к и отобразить, потом третий.
Пробовал найти ответ в книге по php 5, нашёл код

<?
  $file_array 
file("file.txt");
  if(!
$file_array)
  {
    echo(
"Ошибка открытия файла");
  }
  else
  {
    for(
$i=0$i count($file_array); $i++)
    {
      
printf("%s<br>"$file_array[$i]);
    }
  }
?>

но он, вроде, размещает весь текст файла. А можно ли сделать разбивку? Может ввести какието маркеры перед строками, и читать от одного до другого?

   
 
 автор: Axxil   (12.10.2005 в 18:13)   письмо автору
 
   для: sasha   (12.10.2005 в 18:04)
 

Можно так попробовать:
Проверяется если остаток от деления на 10 равен 0 то ставится разделитель десятков

<? 
  $file_array 
file("file.txt"); 
  if(!
$file_array
  { 
    echo(
"Ошибка открытия файла"); 
  } 
  else 
  { 
    for(
$i=0$i count($file_array); $i++) 
    { 
      
printf("%s<br>"$file_array[$i]);
      if(
$i%10==0) echo "раздел между 10-ми"
    } 
  } 
?> 

   
 
 автор: Sasha   (12.10.2005 в 19:38)   письмо автору
 
   для: Axxil   (12.10.2005 в 18:13)
 

В результате получаем:


1 строка 
раздел между 10-ми
2 строка 
3 строка 
4 строка 
5 строка 
6 строка 
7 строка 
8 строка 
9 строка 
10 строка 
11 строка 
раздел между 10-ми
12 строка 
13 строка 
14 строка 
15 строка 


А нужно отобразить только первый десяток строк, а второй десяток в другой части страницы, или на другой странице.

   
 
 автор: cheops   (12.10.2005 в 20:13)   письмо автору
 
   для: Sasha   (12.10.2005 в 19:38)
 

Вам нужно реализовать постраничную навигацию...
Пусть имеется файл text.txt формата
1 Программирование
2 Программирование на PHP
3 Программирование на JavaScript
4 Программирование на ASP.NET
5 Программирование на Java
6 Программирование на Perl
7 Программирование на C++
8 Программирование на Pascal
9 Программирование на Fortran
10 Программирование на Assembler

Тогда реализовать постраничную навигацию для него можно при помощи кода
<?php
  
// Имя файла
  
$filename "text.txt";
  
// Число позиций на странице
  
$pnumber 3;
  
// Открываем файл для чтения
  
$bufer file_get_contents($filename);

  
// Находим все строки при помощи регулярного выражения
  
preg_match_all("#([\d]+) ([^\n]+)(\n|$)#U",
                 
$bufer
                 
$out,
                 
PREG_PATTERN_ORDER);
  
// Формируем промежуточный массив
  
for($i 0$i count($out[1]); $i++)
  {
    
$temp[] = trim($out[2][$i]);
  }

  
// Проверяем передан ли номер текущей страницы
  
if(isset($_GET['page'])) $page $_GET['page'];
  else 
$page 1;
  
// Число страниц
  
$total count($temp);
  
$number = (int)($total/$pnumber);
  if((float)(
$total/$pnumber) - $number != 0$number++;

  
$start = (($page 1)*$pnumber 1);
  
$end $page*$pnumber 1;
  if(
$end $total$end $total;

  
// Выводим содержимое страниц
  
for($i $start$i $end$i++)
  {
    echo 
$temp[$i]."<br>";
  }

  
// Постраничная навигация
  
for($i 1$i <= $number$i++)
  {
    
// Если это произвольная страница
    
if($i != $number)
    {
      if(
$page == $i)
      {
        echo 
"[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]&nbsp;";
      }
      else
      {
        echo 
"<a href=$_SERVER[PHP_SELF]?page=".$i.">[".
             ((
$i 1)*$pnumber 1)."-".$i*$pnumber."]</a>&nbsp;";
      }
    }
    
// Если это последняя страница заменяем последнюю цифру 
    // максимальным числом позиций в массиве $temp
    
else
    {
      if(
$page == $i)
      {
        echo 
"[".(($i 1)*$pnumber 1)."-".($total 1)."]&nbsp;";
      }
      else
      {
        echo 
"<a href=$_SERVER[PHP_SELF]?page=".$i.">[".
             ((
$i 1)*$pnumber 1)."-".($total 1)."]</a>&nbsp;";
      }
    }
  }
?>

   
 
 автор: Sasha   (13.10.2005 в 01:09)   письмо автору
 
   для: cheops   (12.10.2005 в 20:13)
 

Хеопс супер!! То, что нужно!
Работает всё просто замечательно!


Просто любопытно:
А почему, он не работает без циферок, но при этом ему всё равно какие цифры стоят?
И первой строки тоже нет.

   
 
 автор: cheops   (13.10.2005 в 12:32)   письмо автору
 
   для: Sasha   (13.10.2005 в 01:09)
 

А ну да и без цифер работает... это просто кусок системы, ориентированной на индексный файл -там другие части зависят от индекса, сортировка и т.п.

   
 
 автор: Sasha   (13.10.2005 в 13:19)   письмо автору
 
   для: cheops   (13.10.2005 в 12:32)
 

Вообще без цифер не работает. Но какие цифры всё равно, хоть все единицы.

   
 
 автор: 12345   (13.10.2005 в 01:25)   письмо автору
 
   для: Sasha   (12.10.2005 в 19:38)
 

Делаете функцию вывода N-го десятка строк.

for($i=N*10; $i < max(count($file_array),N*10+10; $i++){ echo($file_array[$i].'<br>');}

   
 
 автор: Sasha   (13.10.2005 в 10:09)   письмо автору
 
   для: 12345   (13.10.2005 в 01:25)
 

А если нужно вывести потом второй десяток, а не первый?

   
 
 автор: borolgin   (14.10.2005 в 10:52)   письмо автору
 
   для: Sasha   (13.10.2005 в 10:09)
 

А у меня пишет
"Fatal error: Call to undefined function: file_get_contents() in D:\server\www\news\news.php on line 13"
что я не так делаю?

   
 
 автор: cheops   (14.10.2005 в 14:39)   письмо автору
 
   для: borolgin   (14.10.2005 в 10:52)
 

Это означает, что у вас версия PHP меньше 4.3 - замените
<?php
  $bufer 
file_get_contents($filename);
?>

на
<?php
  $fd 
fopen($filename"w");
  
$bufer fread($fd,filesize($filename));
  
fclose($fd);
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования