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

Форум PHP

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

 

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

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

тема: Строка
 
 автор: user10   (14.06.2010 в 12:20)   письмо автору
 
 

Всем привет !
Есть текстовый файл. весь текст помещён в одну строку.
Вопрос как вывести из этой строки первые 100 символов ?

  Ответить  
 
 автор: sim5   (14.06.2010 в 12:30)   письмо автору
 
   для: user10   (14.06.2010 в 12:20)
 

У вас файл, значит нужно работать с файлами. Открываем мануал и смотрим, есть ли функции для работы с файлами. Есть. Читаем описание функций, в поисках такой, которая могла бы прочитать N байт из файла. Читаем и находим:

fread - Binary-safe чтение файла.

Описание
string fread (int fp, int length)

fread() читает length байт из указателя файла, на который ссылается fp. Чтение останавливается, если прочитано length байт или если достигнут EOF (конец файла), смотря что вперёд.

А можно и по другому (если опять покапаться в мануале). Вот сложно было это сперва сделать?

  Ответить  
 
 автор: Гавриленко Дмитрий   (14.06.2010 в 12:30)   письмо автору
 
   для: user10   (14.06.2010 в 12:20)
 


$fileread = substr($file,0,100);
echo $fileread;
//Где $file переменная прочитанного файл.
//начинает считать с 0 и выводит 100 символов

  Ответить  
 
 автор: user10   (14.06.2010 в 12:33)   письмо автору
 
   для: Гавриленко Дмитрий   (14.06.2010 в 12:30)
 

Спасибо !

  Ответить  
 
 автор: Valick   (14.06.2010 в 12:43)   письмо автору
 
   для: user10   (14.06.2010 в 12:33)
 

[поправлено модератором]

  Ответить  
 
 автор: user10   (14.06.2010 в 13:21)   письмо автору
 
   для: Valick   (14.06.2010 в 12:43)
 

Мне 500/1000 символов всего лишь нужно=). Но на счёт оперативки совет хороший !
допустим файл 1мб. нужно вывести первые 100 символов.в переменную загружаются 100 символов.
Записываются ли в оперативку символы после 100 ? тоесть весь 1мб ?

  Ответить  
 
 автор: Trianon   (14.06.2010 в 13:32)   письмо автору
 
   для: user10   (14.06.2010 в 13:21)
 

определяется исх кодом программы

  Ответить  
 
 автор: sim5   (14.06.2010 в 13:33)   письмо автору
 
   для: user10   (14.06.2010 в 13:21)
 

Я вам выложил описание функции из мануала. Разве там не понятно написано, что данная функция считывает из файла только необходимое? Такое же возможно функцией file_get_contents (начания с версии 5.1), о чем вам ниже говорилось.
Вы читать можете?

Вам мать приготовила борщь и попросила попробовать его, и оценить. Вы вроде бы понимаете, что для этого достаточно съесть всего тарелку его, но вот Дмитрий заставляет вас съесть всю кастрюлю. Это разумно? Так вот, две предложенные вам функции, это считайте и есть тарелка борща вместо всей кастрюли.
А чтобы subsrt использовать, то значит предполагается считать все в строку (весь мегабайт), а потом получить ее часть. Это разумно?

  Ответить  
 
 автор: user10   (14.06.2010 в 14:04)   письмо автору
 
   для: sim5   (14.06.2010 в 13:33)
 

Вы правы . буду пробовать по другому )

  Ответить  
 
 автор: sim5   (14.06.2010 в 12:43)   письмо автору
 
   для: user10   (14.06.2010 в 12:33)
 

Если файл размером в мегабайты, даже сотни КБ, уже нельзя сказать "спасибо".

  Ответить  
 
 автор: user10   (14.06.2010 в 19:06)   письмо автору
 
   для: sim5   (14.06.2010 в 12:43)
 

Вот что получилось.

$file = fopen("1.txt"); 
$str = fread($file,1000);
fclose($file);
echo "$str";

Теперь ещё вопрос:
Как из 1.txt не загружать первые 4 строки ?
(размер символов в первых четырёх может меняться)
5 строка - весь текст

  Ответить  
 
 автор: sim5   (14.06.2010 в 19:18)   письмо автору
 
   для: user10   (14.06.2010 в 19:06)
 

$file = fopen("1.txt", "r"); - открывать файл для чтения.

Четыре строки, это понятие растяжимое, они могут быть разделены символом переноса строки, или html тегом br (или это html-параграф), которые вы считаете за строки, в общем все зависит от формата файла. Так что либо открывать как массив для первого случая, либо разбивать на массив по br (р).

  Ответить  
 
 автор: user10   (14.06.2010 в 20:53)   письмо автору
 
   для: 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 то хз что с оперативкой будет =)

  Ответить  
 
 автор: sim5   (14.06.2010 в 20:56)   письмо автору
 
   для: user10   (14.06.2010 в 20:53)
 

Это что за файл, сообщения, типа гостевой или чата?

  Ответить  
 
 автор: user10   (14.06.2010 в 21:01)   письмо автору
 
   для: sim5   (14.06.2010 в 20:56)
 

угу . под статьи. в верху дата публикации и прочая системная инфа

  Ответить  
 
 автор: sim5   (14.06.2010 в 21:11)   письмо автору
 
   для: user10   (14.06.2010 в 21:01)
 

Тогда начинайте знакомиться с MySQL и забудьте о файлах. Держите свои статьи в базе. Или хотя бы информацию о них в базе, включая имя файла, а само содержание в файле.

  Ответить  
 
 автор: user10   (14.06.2010 в 21:13)   письмо автору
 
   для: sim5   (14.06.2010 в 21:11)
 

в этом и фишка что без мускуля )

  Ответить  
 
 автор: user10   (14.06.2010 в 21:15)   письмо автору
 
   для: user10   (14.06.2010 в 21:13)
 

мб полученый результат сохранять в файл и потом его выводить (типа кеша)

  Ответить  
 
 автор: sim5   (14.06.2010 в 21:25)   письмо автору
 
   для: user10   (14.06.2010 в 21:15)
 

Вы знаете, что такое база данных? Если и не держать в ней само соедражние статей, то дату создания, автора, название и прочее о статье лучше держать в базе. Будет меньше проблем, и больше возможностей. Начинайте изучать MySQL.

  Ответить  
 
 автор: sim5   (14.06.2010 в 21:26)   письмо автору
 
   для: user10   (14.06.2010 в 21:13)
 

Ваш хост не поддерживает базы данных или в чем проблема?

  Ответить  
 
 автор: user10   (14.06.2010 в 21:28)   письмо автору
 
   для: sim5   (14.06.2010 в 21:26)
 

пишу для тренировки. и тем у кого не поддерживает или просто нет возможности использовать мускуль)

  Ответить  
 
 автор: sim5   (14.06.2010 в 21:44)   письмо автору
 
   для: 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 строк из файла, в котором лишь сам текст тоже будет проще, правда если это чисто текстовые файлы.

  Ответить  
 
 автор: user10   (14.06.2010 в 22:01)   письмо автору
 
   для: sim5   (14.06.2010 в 21:44)
 

Спасибо что потратили на меня время ! буду пробовать :)

  Ответить  
 
 автор: sim5   (15.06.2010 в 06:41)   письмо автору
 
   для: 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>'
;
}

  Ответить  
 
 автор: Trianon   (15.06.2010 в 09:01)   письмо автору
 
   для: sim5   (15.06.2010 в 06:41)
 

Примененный подход как-то всё менее и менее вписывается в концепцию, декларированную Вами ранее.
На последних шагах, просто таки идет вразрез.

  Ответить  
 
 автор: sim5   (15.06.2010 в 09:04)   письмо автору
 
   для: Trianon   (15.06.2010 в 09:01)
 

А что ранее декларировалось?

  Ответить  
 
 автор: Trianon   (15.06.2010 в 19:04)   письмо автору
 
   для: sim5   (15.06.2010 в 09:04)
 

что читать файл целиком в память - некрасиво.

  Ответить  
 
 автор: sim5   (15.06.2010 в 19:20)   письмо автору
 
   для: Trianon   (15.06.2010 в 19:04)
 

Ну ресурс полученный запросом из базы тоже может быть не красив по размеру, но зато это структурированные данные. Закачивать весь файл ради получения нескольких символов из него это да, не хорошо. Но хочет человек на файлах, хоть ты убей его, что остается делать? Думаю, лучше закачивать один файл, который не ради символов, а ради управления файлами, иначе пусть ищет иные решения, как ниже например, или свой движок варганит, это уж как автору захочется.

  Ответить  
 
 автор: Trianon   (15.06.2010 в 19:27)   письмо автору
 
   для: sim5   (15.06.2010 в 19:20)
 

>Но хочет человек на файлах, хоть ты убей его, что остается делать?

Убить.

>иначе пусть ищет иные решения, как ниже например,
или пусть ищет.

>или свой движок варганит, это уж как автору
и варганит.

А если нет - убить.


PS.

Он же слижет этот код, и будет пхать его потом вовсюда, не разбираясь!

  Ответить  
 
 автор: sim5   (15.06.2010 в 20:12)   письмо автору
 
   для: Trianon   (15.06.2010 в 19:27)
 

>автор: user10 (14.06.2010 в 21:28)

>пишу для тренировки. и тем у кого не поддерживает
>или просто нет возможности использовать мускуль)

Ну что мне переубеждать его? Пусть тренируется, ну а умный будет работать не с этим кодом, а с базой.

  Ответить  
 
 автор: user10   (15.06.2010 в 22:54)   письмо автору
 
   для: sim5   (15.06.2010 в 20:12)
 

легче создать дополнительные файлы со системной инфой и на оперативку нагрузка минимальная вроде как

  Ответить  
 
 автор: sim5   (16.06.2010 в 04:35)   письмо автору
 
   для: user10   (15.06.2010 в 22:54)
 

Ну если под "системной инфой" подразумевается массив описывающий ваши файлы (предложенное выше), то занимать память всем своим объемом он будет только во время загрузки/выгрузки. Но дело даже не в этом в данном случае. Пока у вас будет файлов 100, еще куда ни шло, но по мере роста их числа, роста потребностей, которые будут усложнять всю структуру ваших данных, этот файл "диспетчер" будет не только разбухать размерами, но и становиться все более неуклюжим.
Да, пока немного и просто по структуре, лежит себе массив (но сериализованный!) в файле, всегда доступный, под рукой, но рано или поздно вы поймете, что мебель в вашей квартире стоит не по-феншую и что-то нужно менять.

  Ответить  
 
 автор: nikita2206   (15.06.2010 в 18:26)   письмо автору
 
   для: user10   (14.06.2010 в 22:01)
 

Лучше попробуйте mooSQL, обратите внимание, что это не MySQL...
http://habrahabr.ru/blogs/php/89298/

  Ответить  
 
 автор: Trianon   (14.06.2010 в 12:59)   письмо автору
 
   для: user10   (14.06.2010 в 12:20)
 

Если считать версию php 5.1 повсеместно достижимой, то функция file_get_contents обеспечивает требуемое.

  Ответить  
 
 автор: sim5   (14.06.2010 в 21:24)   письмо автору
 
   для: Trianon   (14.06.2010 в 12:59)
 

.

  Ответить  
Rambler's Top100
вверх

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