[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление блока из файла
setter
Доброго времени суток!
Есть один вопрос. Я написал скрипт который должен удалять из файла определенный блок. Сам код скрипта ниже. Вроде бы все правильно, но удаляет иногда не то что нужно, а иногда вообще на половину.
Скрипт test.php:
<?
# Читаем файл
$file = file('test.txt');
# Юзер у которого нужно удалить блок
$search='user2';
# Начинаем считывать каждую строку
for($i=0;$i<sizeof($file);$i++)
{
# Если в строке найден указанный юзер
if (preg_match('/'.$search.'/i', $file[$i]))
{
echo "Удален юзер ".$search." в строке №$i";
# Присваиваем переменной $n позицию строки <User "$search">
$n=$i;
# Если не найден
}else{
# Если позиция строки не является концом блока, то удаляем строку.
if($file[$n]!='</User>')
{
$n++;
unset($file[$n-1]);
$fp=fopen("test.txt","w");
fputs($fp,implode("",$file));
fclose($fp);
}
}
}

?>

Сам файл test.txt:
Цитата
<User "user1">
Password "pass"
Mount / D:\patch
Allow / Read List
</User>

<User "user2">
Password "pass"
Mount / D:\patch
Allow / Read List
</User>

<User "user3">
Password "pass"
Mount / D:\patch
Allow / Read List
</User>




Спустя 47 минут, 34 секунды (2.01.2010 - 20:45) Romms написал(а):
мда... а зачем функция preg_replace ?
для твоего случая
$pattern = "/<".$search.">(.*?)</User>/si"; 

Спустя 1 час, 26 минут, 33 секунды (2.01.2010 - 22:12) setter написал(а):
Цитата (Romms @ 2.01.2010 - 17:45)
мда... а зачем функция preg_replace ?
для твоего случая
$pattern = "/<".$search.">(.*?)</User>/si"; 

Спасибо за подсказку.
Сделал так:
$file=file_get_contents("test.txt");
$search='user3';
$pattern = '/<User "'.$search.'">(.*?)<\/User>/si';
$rn = '/

/'
;
$r = preg_replace($pattern, '', $file);
$res = preg_replace($rn, '', $r);
echo $res;

Все работает, но вот ещё одна проблема, попытался вырезать двойные переходы:
$rn = '/

/'
;
$res = preg_replace($rn, '', $r);

но что то не так... wink.gif

Спустя 10 часов, 31 минута, 11 секунд (3.01.2010 - 08:43) Alex VoDevil написал(а):
У меня с регулярными выражениями всегда отношения натянуты были, шпорами пользуюсь, но на вскидку:

preg_replace("/\r\n\r\n/", '', $r);

Воот... Там еще модификаторы какие-то наверняка быть должны... smile.gif
Извиняюсь что так... Мне лень решать задачу за вас при том что я не слишком хорош в этом вопросе и мне тоже придется эксперементировать как и вам. smile.gif Посыл мой в том что перевод строки - "\r\n", если конечно файл писался в виндовом редакторе. Если под никсами - "\n".
Быстрый ответ:

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