[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: мой первый скрипт
megapiz
PHP
$result 10;
$txt_file fopen"file.txt" "r+") or die ("File does not exist!");    
  
    while (!
feof($txt_file)) 
             {
                
$string_from_file fgets($txt_file);
    
         if ( 
$result == $string_from_file)
    {
        
$exist true;    
        
    }
      else
        {
        
$exist false;
        }
        
   }

что я делаю не так ?

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

ps. хост винда, а потом будет linux



Спустя 13 часов, 19 минут, 54 секунды (29.08.2009 - 11:00) Alecs написал(а):
Гм.
У тебя при каждой итерации меняется переменная $exist, и при выходе естественно остается только последнее занесенное в нее значение.

Спустя 29 минут, 40 секунд (29.08.2009 - 11:30) web-dev написал(а):
PHP
<?php
$search
='строка';
$str=file_get_contents('data.txt');
$str=str_replace($search'
'
$str$col);
if(
$col>0# было что то найдено
$str=str_replace('

'
''$str);
$fd=fopen('data.txt''w');
fwrite($fd$str);
fclose($fd);

Спустя 1 час, 53 минуты, 22 секунды (29.08.2009 - 13:23) FatCat написал(а):
web-dev
О ужас!!!


megapiz
Давай попробуем по порядку.

1. Сверять целые строки? Значит нужен массив строк.
Это умеет file()
Одно "но": если файл создан на виндовом хостенге, в бинарном режиме закинут на юникс-машину, и открыт на ней при помощи file() - виндовые \r\n на никсе будут интерпретированы как 2 перевода строки, а значит массив будет удвоенного размера и будет содержать половину пустых строк.
Поэтому я предпочитаю конструкцию:
PHP
$stroki explode(PHP_EOL,trim(file_get_contents("file.txt")));


2. Удалить совпадающие строки (или содержащие в себе поисковую подстроку) и посчитать число удаленных строк проще в цикле:
PHP
// Запускаем счетчик
$searched 0;
// Цикл по строкам
for($i=0;$i<count($stroki);$i++)
{
    
//Поиск полного соответствия искомой строки целой строке в файле
    
if($search_strig == $stroki[$i])
    
// Далее закомментированный вариант для поиска вхождений искомой строки:
    // if( stristr($stroki[$i],$search_strig) )
    
{
        
// Удаляем строку из массива:
        
unset($stroki[$i]);
        
// Считаем:
        
$searched++;
    }
}


3. Остается собрать обновленный файл из массива, перезаписать, и вывести на экран отчет:
PHP
$fh fopen("file.txt""w");
fwrite($fhimplode(PHP_EOL,$stroki));
fclose($fh);
echo 
"Найдено и удалено ".$searched." строк, содержащих поисковый запрос";

Спустя 1 час, 59 минут, 29 секунд (29.08.2009 - 15:23) web-dev написал(а):
user posted image

Спустя 2 часа, 59 минут, 5 секунд (29.08.2009 - 18:22) megapiz написал(а):
ого, спасибо столько вариантов - буду пробовать и обязательно отпишусь !!!

Спустя 57 минут, 3 секунды (29.08.2009 - 19:19) megapiz написал(а):
Цитата (Alecs @ 29.08.2009 - 08:00)
Гм.
У тебя при каждой итерации меняется переменная $exist, и при выходе естественно остается только последнее занесенное в нее значение.


да, действительно намудрил.


FatCat

Вам спасибо - всё заработало. Я если честно про символ переноса строки читал. И давно заметил что на никсе в отличие от винды - пхп и апач ведут себя немного по другому - хотя все моменты есть в документации. Ещё раз
спасибо - пол дня сидел - чуть взрыв мозга не получил.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.