Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: удаления строки из файла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
frol9999
Отправлено: 21 Января, 2009 - 21:02:59
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




CODE (text):
скопировать код в буфер обмена
  1.  
  2. $pyth="test.txt";
  3. $data = @file($pyth);
  4.  
  5. $data[$_GET['numer']]="";
  6.  
  7. $f = fopen($pyth,"w");
  8.  
  9. for($i=0;$i<=sizeof($data);$i++)
  10.  
  11. {
  12. $w=$data[$i];
  13.  
  14. fwrite($f,$w);
  15.  
  16.  
  17. }
  18.  
  19.  
  20. fclose($f);
  21.  

Не могу понять в чём проблема.
Допустим в файле test.txt 10 строк

когда присваиваешь значение get переменой $_GET['numer'];
с начала или середины файла например ?numer=6
то почему то удаляются две строки сразу
вот так

а если идти с конца файла ?numer=9 то нормально
 
 Top
vitaliy_mad
Отправлено: 21 Января, 2009 - 21:10:28
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $pyth="test.txt";
  4. $data = @file($pyth);
  5. $f = fopen($pyth,"w");
  6.  
  7. for($i=0;$i<=sizeof($data);$i++)
  8.  
  9. {
  10. $w=$data[$i];
  11.  
  12. if ($_GET['numer']!=$i) fwrite($f,intval($w));
  13.  
  14.  
  15. }
  16.  
  17.  
  18. fclose($f);
  19. ?>
  20.  

попробуй так

а вообще fwrite($f,intval($w));

(Отредактировано автором: 21 Января, 2009 - 21:12:34)

 
 Top
valenok Модератор
Отправлено: 21 Января, 2009 - 21:14:06
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $file = '1.txt';
  5.  
  6. if(isset($_GET['numer'])):
  7.  
  8.  // массив с нулевого индекса
  9.  $n = intval($_GET['numer']) -1 ;
  10.  // тоесть удаление нулевого индекса удалит первую строку.
  11.  // Третьего элемента - четвертую строку
  12.  
  13.  if($n >=0 )
  14.  {
  15.     $data = file($file);
  16.     $data[$n]=""; // или unset($data[$n]); полностью стереть строку, а не оставить пустой
  17.     $h = fopen($file,'w+');
  18.     fputs($h,implode($data,"\n"));
  19.     fclose($h);
  20.   }
  21. endif;
  22.  


-----
Truly yours, Sasha.
 
My status
 Top
frol9999
Отправлено: 21 Января, 2009 - 21:38:08
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




vitaliy_mad пишет:
попробуй так

а вообще fwrite($f,intval($w));

точно также выводиться
 
 Top
vitaliy_mad
Отправлено: 21 Января, 2009 - 21:41:45
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




попробуй вариант valenok.

Проблема в том что 0 выводиться как пустая строка...
 
 Top
frol9999
Отправлено: 21 Января, 2009 - 22:00:37
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




вы видать не так поняли
при перезаписи файла нет в файле ни каких пустых строк
если присваиваешь значение переменой то удаляться эта строка + следующая
то есть 2 строки сразу а мне надо чтоб удалялась одна определённая строка
 
 Top
Гость
Отправлено: 22 Января, 2009 - 17:13:31
Post Id


УДАЛЁН










По идее вам нужно чтото типа такого

$fname="file.txt"; // Тексторыфй файл
$fdstr=5; // Строку которую удалить
$ftext=file($fname);
$fnew=array();
for($i=0;$i<count($ftext);$i++)
{if($i!=$fdstr) {$fnew[]=$ftext[$i];}
else {}}
$fdes=fopen($fname,"w");
for($i=0;$i<count($fnew);$i++)
{fputs($fdes,$fnew[$i]);}
fclose($fdes);

Кстати а PHP определяет конец строки по \r\n или же просто по \n ?
 
 Top
frol9999
Отправлено: 22 Января, 2009 - 17:13:47
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




сейчас запустил точно такой скрипт под виндой
работает нормально а на линуксе с глюками почему то идёт
на винде у меня стоит PHP 5.1.6 а на линуксе
5.2.6
 
 Top
Гость
Отправлено: 22 Января, 2009 - 17:18:08
Post Id


УДАЛЁН










1 Попрорубйте типа того варианта что я вам предложил Улыбка
2 Права досупа на линухе ?
3 Разница а символах перехода на новую строку?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB