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

Форум PHP

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

 

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

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

тема: Удаление строк в файле
 
 автор: Владимир22   (01.09.2008 в 19:56)   письмо автору
 
 

Как в файле можно удалить строки - всё что больше 100?
Т.е. в файле должно быть не более 100 строк - если больше удалить.
$file = "text.txt"; 
$f=fopen($file,"a"); 
for ($i > 100; $i++) { 
       удалить всё и поставить курсор в начало файла. Как???
    } 
fclose($f);

  Ответить  
 
 автор: Valick   (01.09.2008 в 20:16)   письмо автору
 
   для: Владимир22   (01.09.2008 в 19:56)
 

Можно так...
Открываете файл для чтения
Открываете файл для записи
Из одного в другой пишите нужное количество строк
Закрываете файл для чтения и удаляете его
Закрываете файл для записи и переименовываете его

  Ответить  
 
 автор: BinLaden   (01.09.2008 в 20:43)   письмо автору
 
   для: Владимир22   (01.09.2008 в 19:56)
 

<?php
$fh 
fopen('file.txt''r+');
for(
$l 0$l 100 && fgets($fh); $l++);
ftruncate($fhftell($fh));
fclose($fh);
?>

  Ответить  
 
 автор: Valick   (01.09.2008 в 23:15)   письмо автору
 
   для: BinLaden   (01.09.2008 в 20:43)
 

А если в файле 1000000 строк чей алгоритм сработает быстрее?))
И если в файле менее 100 строк?
Не могли бы вы пояснить код, очень хочу разобраться, а что-то ускользает.
в частности непонятно
&& fgets($fh); 

fgets
Возвращает строку размером в length - 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle . Чтение заканчивается, когда количество прочитанных байтов достигает length - 1, по достижении конца строки (который включается в возвращаемое значение) или по достижении конца файла (что бы ни встретилось первым). Если длина не указана, по умолчанию ее значение равно 1 килобайту или 1024 байтам.

  Ответить  
 
 автор: BinLaden   (01.09.2008 в 23:42)   письмо автору
 
   для: Valick   (01.09.2008 в 23:15)
 

> А если в файле 1000000 строк чей алгоритм сработает быстрее?))

С каким алгоритмом я должен сравнивать?

> Не могли бы вы пояснить код, очень хочу разобраться, а что-то ускользает.
в частности непонятно

Если в файле менее 100 строк, то дальше выполнение цикла бессмысленно.

> И если в файле менее 100 строк?

Ну...См. выше

> Возвращает строку размером в length - 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle . Чтение заканчивается, когда количество прочитанных байтов достигает length - 1, по достижении конца строки (который включается в возвращаемое значение) или по достижении конца файла (что бы ни встретилось первым). Если длина не указана, по умолчанию ее значение равно 1 килобайту или 1024 байтам.

Я могу только посоветовать читать англоязычную версию мануала...Там как-то чаще обновляют информацию.

  Ответить  
 
 автор: Valick   (01.09.2008 в 23:45)   письмо автору
 
   для: BinLaden   (01.09.2008 в 23:42)
 

С каким алгоритмом я должен сравнивать?

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

  Ответить  
 
 автор: BinLaden   (01.09.2008 в 23:46)   письмо автору
 
   для: Valick   (01.09.2008 в 23:45)
 

> с тем который я описал

Попробуйте сначала его реализовать. Получится - покажите код.

  Ответить  
 
 автор: Valick   (01.09.2008 в 23:52)   письмо автору
 
   для: BinLaden   (01.09.2008 в 23:46)
 

Сомневаетесь? Или это личная неприязнь ко мне?))
Что вы хотите услышать? Что вы умнее меня в этом, да вы умнее меня.
Мне действительно непонятно условие цикла, но это вовсе не означает что я безнадёжен.

  Ответить  
 
 автор: BinLaden   (01.09.2008 в 23:55)   письмо автору
 
   для: Valick   (01.09.2008 в 23:52)
 

Не совсем Вас понимаю: это Вы начали спор, в чем я виноват?

Поэтому я жду конкретики, а не бла-бла.

И давайте не говорить кто тут умнее. Вы когда научились молотком гвоздь вбивать - Вы умнее не стали, ровно как и все мы, когда подучили PHP.

  Ответить  
 
 автор: Valick   (01.09.2008 в 23:59)   письмо автору
 
   для: BinLaden   (01.09.2008 в 23:55)
 

это Вы начали спор
Я начал не спор а всего лишь задал несколько вопросов, и поверьте абсолютно без задней мысли, а по причине моей любознательности. Спорили мы с вами в другом топике и я надеюсь это ни коим образом не отразится здесь.

  Ответить  
 
 автор: BinLaden   (02.09.2008 в 00:04)   письмо автору
 
   для: Valick   (01.09.2008 в 23:59)
 

Я на Ваши вопросы ответил.

А вот тем, что Вы спросили по поводу что быстрее...Тут я несколько озадачен, потому как конкретно описанный Вами алгоритм, думаю, невозможно реализовать: открывая опять файл с перезаписью Вы затираете его и считывать будет нечего. Возможно я ошибаюсь, вот и предложил показать код.

  Ответить  
 
 автор: Valick   (02.09.2008 в 00:08)   письмо автору
 
   для: BinLaden   (02.09.2008 в 00:04)
 

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

  Ответить  
 
 автор: Valick   (02.09.2008 в 00:06)   письмо автору
 
   для: BinLaden   (01.09.2008 в 23:55)
 

Поэтому я жду конкретики, а не бла-бла.
Т.е. что бы проверить закон Ньютона необходимо всенепременно прыгнуть с тринадцатого этажа?)

  Ответить  
 
 автор: BinLaden   (02.09.2008 в 00:14)   письмо автору
 
   для: Valick   (02.09.2008 в 00:06)
 

Вообще-то Вы почти правы. Физика неразрывно связана с опытом. И любой закон должен быть доказан и на практике.

  Ответить  
 
 автор: Drago   (02.09.2008 в 00:04)   письмо автору
 
   для: Valick   (01.09.2008 в 23:52)
 

fgets() там используется лишь для того, чтобы смещать указатель файла в конец прочтенной строки. Таким образом, условие можно описать так:
Пока l < 100 И  fgets($fh) возвращает true (то есть, прочитана очередная строка и указатель файла установлен в ее конец)

Потом функцией ftell($th) вычисляем где остановился указатель после выполнения цикла и с помощью ftruncate($fh, ftell($fh)) обрезаем файл от начала, до размера, который будет равен смещению файлового указателя.

  Ответить  
 
 автор: Valick   (02.09.2008 в 00:23)   письмо автору
 
   для: Drago   (02.09.2008 в 00:04)
 

ftruncate($fh, ftell($fh))
с этом-то проблем не возникло
Спасибо за обьяснение, терь понятно)

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

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