|
|
|
| Всем привет !
Есть текстовый файл. весь текст помещён в одну строку.
Вопрос как вывести из этой строки первые 100 символов ? | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 12:20)
| | У вас файл, значит нужно работать с файлами. Открываем мануал и смотрим, есть ли функции для работы с файлами. Есть. Читаем описание функций, в поисках такой, которая могла бы прочитать N байт из файла. Читаем и находим:
fread - Binary-safe чтение файла.
Описание
string fread (int fp, int length)
fread() читает length байт из указателя файла, на который ссылается fp. Чтение останавливается, если прочитано length байт или если достигнут EOF (конец файла), смотря что вперёд.
А можно и по другому (если опять покапаться в мануале). Вот сложно было это сперва сделать? | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 12:20)
| |
$fileread = substr($file,0,100);
echo $fileread;
//Где $file переменная прочитанного файл.
//начинает считать с 0 и выводит 100 символов
|
| |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(14.06.2010 в 12:30)
| | Спасибо ! | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 12:33)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: Valick
(14.06.2010 в 12:43)
| | Мне 500/1000 символов всего лишь нужно=). Но на счёт оперативки совет хороший !
допустим файл 1мб. нужно вывести первые 100 символов.в переменную загружаются 100 символов.
Записываются ли в оперативку символы после 100 ? тоесть весь 1мб ? | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 13:21)
| | определяется исх кодом программы | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 13:21)
| | Я вам выложил описание функции из мануала. Разве там не понятно написано, что данная функция считывает из файла только необходимое? Такое же возможно функцией file_get_contents (начания с версии 5.1), о чем вам ниже говорилось.
Вы читать можете?
Вам мать приготовила борщь и попросила попробовать его, и оценить. Вы вроде бы понимаете, что для этого достаточно съесть всего тарелку его, но вот Дмитрий заставляет вас съесть всю кастрюлю. Это разумно? Так вот, две предложенные вам функции, это считайте и есть тарелка борща вместо всей кастрюли.
А чтобы subsrt использовать, то значит предполагается считать все в строку (весь мегабайт), а потом получить ее часть. Это разумно? | |
|
|
|
|
|
|
|
для: sim5
(14.06.2010 в 13:33)
| | Вы правы . буду пробовать по другому ) | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 12:33)
| | Если файл размером в мегабайты, даже сотни КБ, уже нельзя сказать "спасибо". | |
|
|
|
|
|
|
|
для: sim5
(14.06.2010 в 12:43)
| | Вот что получилось.
$file = fopen("1.txt");
$str = fread($file,1000);
fclose($file);
echo "$str";
|
Теперь ещё вопрос:
Как из 1.txt не загружать первые 4 строки ?
(размер символов в первых четырёх может меняться)
5 строка - весь текст | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 19:06)
| | $file = fopen("1.txt", "r"); - открывать файл для чтения.
Четыре строки, это понятие растяжимое, они могут быть разделены символом переноса строки, или html тегом br (или это html-параграф), которые вы считаете за строки, в общем все зависит от формата файла. Так что либо открывать как массив для первого случая, либо разбивать на массив по br (р). | |
|
|
|
|
|
|
|
для: sim5
(14.06.2010 в 19:18)
| | всего 5 строк . все строки могут иметь разное количество символов.
инфа в файл записывается построчно
$text = "
$a
$b
$c
$d
$e
";
file_put_contents("1.txt",$text);
|
тоесть файл будет иметь вид:
-----------------
Привет
Пока
12121212121212121212121212121212
как дела
основной текст основной текст основной текст основной текст
основной текст основной текст основной текст основной текст
и тд.
------------------
нужно только 5-ую вывести.
ещё вот рабочий код (не выводит первые 4 строки. и выводит только 500 символов):
$st= file("1.txt");
foreach ($st as $a=>$b)
{
if($a < 5) continue;
$b = substr($b, 0, 500);
echo "$b";
}
|
но если в место 1.txt будет много файлов $i.txt то хз что с оперативкой будет =) | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 20:53)
| | Это что за файл, сообщения, типа гостевой или чата? | |
|
|
|
|
|
|
|
для: sim5
(14.06.2010 в 20:56)
| | угу . под статьи. в верху дата публикации и прочая системная инфа | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 21:01)
| | Тогда начинайте знакомиться с MySQL и забудьте о файлах. Держите свои статьи в базе. Или хотя бы информацию о них в базе, включая имя файла, а само содержание в файле. | |
|
|
|
|
|
|
|
для: sim5
(14.06.2010 в 21:11)
| | в этом и фишка что без мускуля ) | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 21:13)
| | мб полученый результат сохранять в файл и потом его выводить (типа кеша) | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 21:15)
| | Вы знаете, что такое база данных? Если и не держать в ней само соедражние статей, то дату создания, автора, название и прочее о статье лучше держать в базе. Будет меньше проблем, и больше возможностей. Начинайте изучать MySQL. | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 21:13)
| | Ваш хост не поддерживает базы данных или в чем проблема? | |
|
|
|
|
|
|
|
для: sim5
(14.06.2010 в 21:26)
| | пишу для тренировки. и тем у кого не поддерживает или просто нет возможности использовать мускуль) | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 21:28)
| | Сейчас за не очень большую плату вообще-то, хостеры предоставляют базы данных, так что о не поддержке, это для скупых.
Но если и делать на чисто файлах, то нужно организовать все иначе. У вас должен быть файл, который будет держать информацию о статьях, он и будет имитировать в некотором роде базу данных, и служить для "навигации" по статьям. Сам файл это массив, например, такого содержания.
<?
$info = array(
array(//информация о первой статье
'title'=>'Статья 1', //название статьи
'autor'=>'Автор 1', //автор
'adddate'='2009-08-12', //дата добавления
'file'=>'file1.txt' //имя файла статьи
),
array(//информация о второй статье
'title'=>'Статья 2', //название статьи
'autor'=>'Автор 2', //автор
'adddate'='2010-10-22', //дата добавления
'file'=>'file2.txt' //имя файла статьи
) //и так далее
);
|
Этот массив можно сеарелизовать и помещать в файл, а для работы десерелизовать и работать как с массивом. Само же содержание статей находится в файлах указанных в ключе массива file. Это даст возможность поиска необходимых статей, без лишних проблем с загрузкой файлов для этого, и другие полезные возможности. И считать первые N строк из файла, в котором лишь сам текст тоже будет проще, правда если это чисто текстовые файлы. | |
|
|
|
|
|
|
|
для: sim5
(14.06.2010 в 21:44)
| | Спасибо что потратили на меня время ! буду пробовать :) | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 22:01)
| | Немного не так должен выглядеть массив, кроме этого в него и нужно добавить N-символ или строк (надо полагать, что это для краткого содержания статьи), чтобы не таскать их из файлов.
Массив, должен отражать id статей, по которым их можно будет находить, сортировать, извлекать о них данные.
<?
$info = array(
1=>array(//информация о первой статье
'title'=>'Статья 1', //название статьи
'autor'=>'Автор 1', //автор
'adddate'=>'2009-08-12', //дата добавления
'descript'=>'Краткое описание 1', //анонс статьи
'file'=>'file1.txt', //имя файла статьи
'img'=>'im1.jpg' //изображение для статьи
),
2=>array(//информация о второй статье
'title'=>'Статья 2', //название статьи
'autor'=>'Автор 2', //автор
'adddate'=>'2010-10-22', //дата добавления
'descript'=>'Краткое описание 2', //анонс статьи
'file'=>'file2.txt', //имя файла статьи
'img'=>'im2.jpg' //изображение для статьи
),
3=>array(//информация о третей статье
'title'=>'Статья 3', //название статьи
'autor'=>'Автор 3', //автор
'adddate'=>'2010-11-30', //дата добавления
'descript'=>'Краткое описание 3', //анонс статьи
'file'=>'file3.txt', //имя файла статьи
'img'=>'im3.jpg' //изображение для статьи
)
//.....
);
|
Для работы с массивом, в режимах добавления статей, выводе и пр., извлекать его в сессию, и работать уже с сессионным массивом.
<?
if(!isset($_SESSION['info'])) $_SESSION['info'] = unserialize(file_get_contents('info.dat'));
//а для сохранения массива после редактирования
file_put_contents('info.dat', serialize($_SESSION['info']));
|
При выводе ссылаться на id статьи
<?
foreach($_SESSION['info'] as $id => $hdr) {
echo $hdr['title'].'<br>'.$hdr['autor'].'<br>'.$hdr['adddate'].'<p>'
.$hdr['descript'].'</p><a href="script.php?id='.$id.'">Читать все...</a>
<hr width="100%" size="1" noshade>';
}
|
| |
|
|
|
|
|
|
|
для: sim5
(15.06.2010 в 06:41)
| | Примененный подход как-то всё менее и менее вписывается в концепцию, декларированную Вами ранее.
На последних шагах, просто таки идет вразрез. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2010 в 09:01)
| | А что ранее декларировалось? | |
|
|
|
|
|
|
|
для: sim5
(15.06.2010 в 09:04)
| | что читать файл целиком в память - некрасиво. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2010 в 19:04)
| | Ну ресурс полученный запросом из базы тоже может быть не красив по размеру, но зато это структурированные данные. Закачивать весь файл ради получения нескольких символов из него это да, не хорошо. Но хочет человек на файлах, хоть ты убей его, что остается делать? Думаю, лучше закачивать один файл, который не ради символов, а ради управления файлами, иначе пусть ищет иные решения, как ниже например, или свой движок варганит, это уж как автору захочется. | |
|
|
|
|
|
|
|
для: sim5
(15.06.2010 в 19:20)
| | >Но хочет человек на файлах, хоть ты убей его, что остается делать?
Убить.
>иначе пусть ищет иные решения, как ниже например,
или пусть ищет.
>или свой движок варганит, это уж как автору
и варганит.
А если нет - убить.
PS.
Он же слижет этот код, и будет пхать его потом вовсюда, не разбираясь! | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2010 в 19:27)
| | >автор: user10 (14.06.2010 в 21:28)
>пишу для тренировки. и тем у кого не поддерживает
>или просто нет возможности использовать мускуль)
Ну что мне переубеждать его? Пусть тренируется, ну а умный будет работать не с этим кодом, а с базой. | |
|
|
|
|
|
|
|
для: sim5
(15.06.2010 в 20:12)
| | легче создать дополнительные файлы со системной инфой и на оперативку нагрузка минимальная вроде как | |
|
|
|
|
|
|
|
для: user10
(15.06.2010 в 22:54)
| | Ну если под "системной инфой" подразумевается массив описывающий ваши файлы (предложенное выше), то занимать память всем своим объемом он будет только во время загрузки/выгрузки. Но дело даже не в этом в данном случае. Пока у вас будет файлов 100, еще куда ни шло, но по мере роста их числа, роста потребностей, которые будут усложнять всю структуру ваших данных, этот файл "диспетчер" будет не только разбухать размерами, но и становиться все более неуклюжим.
Да, пока немного и просто по структуре, лежит себе массив (но сериализованный!) в файле, всегда доступный, под рукой, но рано или поздно вы поймете, что мебель в вашей квартире стоит не по-феншую и что-то нужно менять. | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 22:01)
| | Лучше попробуйте mooSQL, обратите внимание, что это не MySQL...
http://habrahabr.ru/blogs/php/89298/ | |
|
|
|
|
|
|
|
для: user10
(14.06.2010 в 12:20)
| | Если считать версию php 5.1 повсеместно достижимой, то функция file_get_contents обеспечивает требуемое. | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2010 в 12:59)
| | . | |
|
|
|