|
|
|
| Вопрос: есть файл в 30 строк. Как прочитать с 10 до 15 строку, нетрогая остальные?
...вы не против, если я буду и дальше задавать сдесь свои вопросы? | |
|
|
|
|
|
|
|
для: mrklon
(27.10.2006 в 22:40)
| | Прочитать начиная с 10-й строки не получится ... нужно просто пропустить первые 9 строк. (используя fgets)
Используя ф-ю file, получим массив, где элементами будут строки из файла... Не нужные можно потом unset
http://softtime.ru/forum/read.php?id_forum=1&id_theme=21442&page=1 | |
|
|
|
|
|
|
|
для: kasmanaft
(27.10.2006 в 22:54)
| | То есть, если нужно прочитать 31 строчку, то придеться читать и все 30? На сколько тормознуто это будет при больших файлах (ориентировачно 1`000кб) | |
|
|
|
|
|
|
|
для: mrklon
(27.10.2006 в 23:01)
| | Это происходит, как правило, очень быстро, файл в 1-10 Мб - это не много по меркам PHP. | |
|
|
|
|
|
|
|
для: mrklon
(27.10.2006 в 22:40)
| | Совсем не трогая не получится. Файл не большой, поэтому его содержимое можно прочитать в массив при помощи функции file(), а потом прочитать содержмое массива с 10 по 15 элемент
<?php
$arr = file("text.txt");
// На единицу меньше, так как индексы в массиве начинаются с нуля
for($i = 9; $i < 14; $i++) echo $arr[$i]."<br>";
?>
|
>...вы не против, если я буду и дальше задавать сдесь свои вопросы?
Все будут только за, форум для того и предназначен, чтобы вы могли задать здесь свой вопрос и получить ответ (максимум что вам грозит - никто не ответит, если не знает ответа или ленится отвечать :). | |
|
|
|
|
|
|
|
для: cheops
(27.10.2006 в 22:55)
| | Тогда слежующий вопрос:
как кучку репласов:
$vivod=preg_replace("/{{nik}}/", $nik[$n+$i],$msg);
$vivod2=preg_replace("/{{mail}}/", $mail[$n+$i],$vivod);
$vivod3=preg_replace("/{{web}}/", $web[$n+$i],$vivod2);
$vivod4=preg_replace("/{{msg}}/", $mmm[$n+$i],$vivod3);
свести к одному preg_replace | |
|
|
|
|
|
|
|
для: mrklon
(28.10.2006 в 17:40)
| | Никто незнает как чгрупироват замены? Или это нельзя сделать? :(
Нужно сделать такую вещ:
$c = $a / $b
Нужно, чтоб, если они деляться без остатка, ответ осталься бы тот-же, а, если с остатком, то нужен ответ без остатка плюс еденица
Пример:
50/5 равно 10
50/6 равно 9 а не 8,3 | |
|
|
|
|
|
|
|
для: mrklon
(28.10.2006 в 17:40)
| | попробуй так:
$vivod=preg_replace("/{{([a-z]+)}}/e", '\$\1[\$n+\$i]',$msg);
|
| |
|
|
|
|
|
|
|
для: ЯR
(28.10.2006 в 20:48)
| | Хитро! Недодумался! Спасибо!
А вот про такое скажите что нить?
50/5 равно 10
50/6 равно 9 а не 8,3 | |
|
|
|
|
|
|
|
для: mrklon
(28.10.2006 в 23:11)
| | | |
|
|
|
|
|
|
|
для: ЯR
(28.10.2006 в 23:39)
| | Сенкс! За помощью ЯR написал вот такой "постраничный вывод":
<?
$i=0;
$clinks=4; // skolko ssilok pokazivat
$k=5; //pokazivat po *
$v=50; //vsego strok
$vk=ceil($v/$k); //vsego stranits
$page = $HTTP_GET_VARS["cnt"];
$page=$page-1;
#----------------------------------------------------------------------------------
if ($v>$k) // проверяем нужность этой навигации
if($page+1>1){ echo "<a href=index.php?cnt=1> << </a>";} // Если страница не первая, то выводм ссылку на 1 страницу
if($page+1>1){ echo "<a href=index.php?cnt=",$page+1-1,"> < </a>";} // Если страница не первая, то вывожим ссылку на предыдущую страницу
for($i=0;($page+1)-($clinks/2)+$i <= ($page+1)+($clinks/2) ;$i++) //малюем цикл создания 2 ссылок ДО, и 2 ссылок ПОСЛЕ страници
{
if(($page+1)-($clinks/2)+$i != $page+1)//Проверяем несовпадения страници со ссылками
{
if(($page+1)-($clinks/2)+$i > 0 and ($page+1)-($clinks/2)+$i <= $vk)
{echo "<a href=index.php?cnt=",($page+1)-($clinks/2)+$i,">",($page+1)-($clinks/2)+$i,"</a>";}//Отрезаем несуществующие крайние ссылки
}
else
{
echo "<b> ",($page+1)," </b>"; //Вывлдим номер страници
}
}
if($page+1<=$vk-1){ echo "<a href=index.php?cnt=",$page+1+1,"> > </a>";}//Если страница не последняя то выводм ссылку на след. страницу
if($page+1<=$vk-1){ echo "<a href=index.php?cnt=",$vk,"> >> </a>";}//Если страница не помледняя, то выводм ссылку на последн. страницу
}
#-----------------------------------------------------------------------------------
# dalse kod vivods kontenta...
?>
|
А вот что на выходе:
<< < 67 8 910 > >>
Господа проффесирналы! Может что коряво написано? Или моэно упростить? | |
|
|
|
|
|
|
|
для: mrklon
(29.10.2006 в 08:55)
| | по-моему лучше так:
<?
$i=0;
$clinks=4; // skolko ssilok pokazivat
$k=5; //pokazivat po *
$v=50; //vsego strok
$vk=ceil($v/$k); //vsego stranits
$page = (int)$HTTP_GET_VARS["cnt"];
if ($page < 1) $page = 1;
#----------------------------------------------------------------------------------
if ($v>$k){ // проверяем нужность этой навигации
if($page+1>1){
echo "<a href=index.php?cnt=1> << </a>"; // Если страница не первая, то выводм ссылку на 1 страницу
echo "<a href=index.php?cnt=",$page-1,"> < </a>"; // Если страница не первая, то вывожим ссылку на предыдущую страницу
}
for($i=0; $i-($clinks/2) <= ($clinks/2) ;$i++) //малюем цикл создания 2 ссылок ДО, и 2 ссылок ПОСЛЕ страници
{
if($i-($clinks/2) != 0)//Проверяем несовпадения страници со ссылками
{
if($page-($clinks/2)+$i > 0 and $page-($clinks/2)+$i <= $vk)
{echo "<a href=index.php?cnt=",$page-($clinks/2)+$i,">",$page-($clinks/2)+$i,"</a>";}//Отрезаем несуществующие крайние ссылки
}
else
{
echo "<b> ",$page," </b>"; //Выводим номер страници
}
}
if($page<=$vk-1){
echo "<a href=index.php?cnt=",$page+1,"> > </a>";//Если страница не последняя то выводм ссылку на след. страницу
echo "<a href=index.php?cnt=",$vk,"> >> </a>";//Если страница не последняя, то выводм ссылку на последн. страницу
}
}
$page=$page-1;
#-----------------------------------------------------------------------------------
# dalse kod vivods kontenta...
?>
|
| |
|
|
|
|
|
|
|
для: ЯR
(29.10.2006 в 09:21)
| | Спасибо еще раз.
Хочу возвратиться к свой базе данных. А может проще хранит каждое сообщение гостевой книги отдельным файлом. Тогда, по идеи, можно будет прочитать с 10 по 15 файл. И удалить так же... | |
|
|
|
|
|
|
|
для: mrklon
(29.10.2006 в 23:39)
| | Можно и так, но при очень большом кол-ве файлов будет тормозить. | |
|
|
|
|
|
|
|
для: ЯR
(30.10.2006 в 06:43)
| | ЯR: Можно и так, но при очень большом кол-ве файлов будет тормозить.
Но, я думаю прочитать 10 файлов из 200 проще, чем открывать файл в 200 строк и читать оттуда 10 строк...
Я верю что readdir() быстрее fgets()...
--------------------------------------------
Немогу понять асипку!
<?
$i=0;
$clinks=6; // skolko ssilok pokazivat
$k=3; //pokazivat po *
$v=15; //vsego strok
$vk=ceil($v/$k); //vsego stranits
$page = $HTTP_GET_VARS["cnt"];
$page=$page-1;
######################################
$db_open=opendir("./db");
for($i=-2; $i < $page*$k+$k ;$i++)
{
$db_read[$i]=readdir($db_open);
if ($db_read[$i]!="." and $db_read[$i]!=".." and ($page*$k <= $i))
{
$db_msg_open[$i]=fopen("db/".$db_read[$i],"r");
$db_msg_read[$i]=fgets($db_msg_open[$i],1000);
list($nik[$i],$mail[$i],$web[$i],$msg[$i],$data[$i],$otvet[$i])=explode("|",$db_msg_read[$i]); // ----- 69 stroka ----
$vivod1=preg_replace("/{{nik}}/",$nik[$i],$msg_tmpl);
echo $vivod1;
fclose($db_msg_open[$i]);
}
else
{
unset($db_read[$i]);
}
}
?>
|
Выводит:
Notice: Undefined offset: 5 in x:\home\localhost\www\index.php on line 69
Notice: Undefined offset: 4 in x:\home\localhost\www\index.php on line 69
Notice: Undefined offset: 3 in x:\home\localhost\www\index.php on line 69
Notice: Undefined offset: 2 in x:\home\localhost\www\index.php on line 69
Notice: Undefined offset: 1 in x:\home\localhost\www\index.php on line 69 | |
|
|
|
|
|
|
|
для: mrklon
(31.10.2006 в 23:43)
| | >Но, я думаю прочитать 10 файлов из 200 проще, чем открывать файл в 200 строк и читать оттуда 10 строк...
Совершенно безосновательное предположение.
>Я верю что readdir() быстрее fgets()...
readdir сама по себе файл не читает.
а readdir+file будет медленнее fgets | |
|
|
|
|
|
|
|
для: Trianon
(01.11.2006 в 00:06)
| | делай как тебе удобнее.
Думаю, большой разницы нет. | |
|
|
|
|
|
|
|
для: mrklon
(31.10.2006 в 23:43)
| | Так тут вроде всего около 40 строк :-) | |
|
|
|
|
|
|
|
для: ЯR
(01.11.2006 в 11:28)
| | Так я привел не весь код, Ту часть что 100% работает - я заменил на "############" Да я же отметил: какая строка 69-ая.
Вот все целиком:
<a href="forms.php" target="_blank">FORMS</a><hr><hr>
<?
$i=0;
$clinks=6; // skolko ssilok pokazivat
$k=3; //pokazivat po *
$v=15; //vsego strok
$vk=ceil($v/$k); //vsego stranits
$page = $HTTP_GET_VARS["cnt"];
if (empty($page))
{
$page=1;
}
$page=$page-1;
#----------------------------------------------------------------------------------
if ($v>$k){
if($page+1>1){ echo "<a href=index.php?cnt=1> << </a>";}
if($page+1>1){ echo "<a href=index.php?cnt=",$page+1-1,"> < </a>";}
for($i=0;($page+1)-($clinks/2)+$i <= ($page+1)+($clinks/2) ;$i++)
{
if(($page+1)-($clinks/2)+$i != $page+1)
{
if(($page+1)-($clinks/2)+$i > 0 and ($page+1)-($clinks/2)+$i <= $vk)
{echo "<a href=index.php?cnt=",($page+1)-($clinks/2)+$i,">",($page+1)-($clinks/2)+$i,"</a>";}
}
else
{
echo "<b> ",($page+1)," </b>";
}
}
if($page+1<=$vk-1){ echo "<a href=index.php?cnt=",$page+1+1,"> > </a>";}
if($page+1<=$vk-1){ echo "<a href=index.php?cnt=",$vk,"> >> </a>";}
}
echo("<hr>");
#----------------------------------------------------------------------------------
$msg_tmpl_open=fopen("tmpl/template.html","r");
$msg_tmpl_read=fread($msg_tmpl_open,10000);
list($shapka,$msg_tmpl,$niz)=explode("{{msg_template}}",$msg_tmpl_read);
#----------------------------------------------------------------------------------
$db_open=opendir("./db");
for($i=-2; $i < $page*$k+$k ;$i++)
{
$db_read[$i]=readdir($db_open);
if ($db_read[$i]!="." and $db_read[$i]!=".." and ($page*$k <= $i))
{
$db_msg_open[$i]=fopen("db/".$db_read[$i],"r");
$db_msg_read[$i]=fgets($db_msg_open[$i],1000);
list($nik[$i],$mail[$i],$web[$i],$msg[$i],$data[$i],$otvet[$i])=explode("|",$db_msg_read[$i]);
$vivod1=preg_replace("/{{nik}}/",$nik[$i],$msg_tmpl);
echo $vivod1;
fclose($db_msg_open[$i]);
}
else
{
unset($db_read[$i]);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: mrklon
(01.11.2006 в 22:48)
| | а приведи пример print_r($db_msg_read) (что оно выдаёт?) | |
|
|
|
|
|
|
|
для: ЯR
(02.11.2006 в 04:20)
| | Array ( [3] => [4] => [5] => )
Незнаю, что это может значить :-{| | |
|
|
|
|
|
|
|
для: mrklon
(02.11.2006 в 11:14)
| | Значит у вас ничего из файла не прочиталось.
Поэтому и ошбики.
Может заменить
<?php
$db_msg_open[$i]=fopen("db/".$db_read[$i],"r");
$db_msg_read[$i]=fgets($db_msg_open[$i],1000);
fclose($db_msg_open[$i]);
?>
|
на
<?php
$db_msg_read[$i] = file_get_contents("db/".$db_read[$i]);
?>
|
Может так заработает | |
|
|
|
|
|
|
|
для: ЯR
(02.11.2006 в 13:44)
| | Спасибо!
Вот новая задачка:
Если я открываю директорию, и "readdir"-ом читаю файлы, то он их выводит по такому принципу:
1.dat
10.dat
11.dat
12.dat
13.dat
-//-
19.dat
2.dat
21.dat
и т.д.
А нужно:
1.dat
2.dat
3.dat
4.dat
Я нехочу использовать сортировку массива, слишком дорого будет. Нельзя-ли заставить "readdir" Работать понормальному? | |
|
|
|
|
|
|
|
для: mrklon
(02.11.2006 в 17:32)
| | Без использования промежуточного массива не получится. | |
|
|
|
|
|
|
|
для: cheops
(02.11.2006 в 19:43)
| | u menya poluchilos , stranno | |
|
|
|