PHP, строки в файле.

12
MiladyX
На сайте с 23.09.2008
Offline
65
798

Подскажите плз как удалить строки из файла, файл в таком виде:

12->23->31231212

12->4342->34324343

12->dffew->13132

11->32e3->43132

Надо удалить строки полностью, кот. начинаются с 12. У меня не получается, сколько пробую...

AlikZP
На сайте с 22.11.2009
Offline
107
#1

<?

$lines = file('file.txt');

foreach ($lines as $index => $value) {
$pos = strpos($value, '12');
if (($pos === false) or ($pos > 0)) file_put_contents('file.txt', $value, FILE_APPEND);
}
?>

Как-то так

Website CMS: быстрая, удобная, недорогая! Вечная лицензия за 45$ (/ru/forum/524503) Яся - быстрый поиск фото для товаров. OpenCart/ocStore. Дополнение. (/ru/forum/665287) Грамотная верстка ваших макетов (/ru/forum/comment/8853216)
MiladyX
На сайте с 23.09.2008
Offline
65
#2

AlikZP, пасибо , но у меня не удаляет так.

я Делаю так:



$r_tid = $_POST['r_tid']; // тут передаётся число, например 12

$file = "dat.txt";
if ( is_readable($file) ) :
$fp = fopen($file, "r+");
else :
print "$file is not readable!";
endif;

$count = is_file($file) ? sizeof(file($file)) : "$file file not found!"; //подсчитываем количество строк

for($i=0;$i<$count;$i++) //создаём цикл, кол-во оборотов равно количиству строк в файле
{
$str = fgets($fp,1000);
$str1 = explode('->', $str);
if ($str1[0]==$r_tid)
{
echo $str.'<br/>';

}

Т.е. я нахожу и могу вывести те строки, кот. мне нужны, но вот удалить их...

sashka_
На сайте с 27.01.2010
Offline
103
#3
AlikZP:
<?

$lines = file('file.txt');

foreach ($lines as $index => $value) {
$pos = strpos($value, '12');
if (($pos === false) or ($pos > 0)) file_put_contents('file.txt', $value, FILE_APPEND);
}
?>


Как-то так

а если будет 12 в середине ??? оно всёравно удалит ,

 $file = file_get_contents('file.txt');

$file = preg_replace("#^12.+#","",$file);
file_put_contents('file.txt',$file);

попробуй так =) если че пиши есть ещё способ

Знаю PHP, JS, jQuery. Помощь для вашего сайта. (/ru/forum/840509).
AlikZP
На сайте с 22.11.2009
Offline
107
#4
sashka_:
а если будет 12 в середине ??? оно всёравно удалит ,

Чего вы так решили?

Строка

if (($pos === false) or ($pos > 0)) file_put_contents('file.txt', $value, FILE_APPEND);

читается же как

Если нет такой подстроки или она не находится в начале.

Будет вторая - пропустит, запишет в файл

S
На сайте с 28.10.2005
Offline
319
#5



$t = file ('text.txt');

array_walk ($t, 'clear');

file_put_contents ('tetx.txt', $t);

function clear (&$l) {

$l = preg_replace ('/^12.*/', '', $l);

}

Как-то так

MiladyX
На сайте с 23.09.2008
Offline
65
#6

sashka_, semenov, не работает у меня так...

AlikZP
На сайте с 22.11.2009
Offline
107
#7

Какую ошибку выдает? Права на запись файла стоят ?

sashka_
На сайте с 27.01.2010
Offline
103
#8

щас проверил , у меня в регулярке сотри ^


<?php
$content = <<<HTML
12->23->31231212
12->4342->34324343
12->dffew->13132
11->32e3->43132
HTML;
$file = $content;
$file = preg_replace("#12.+#","",$file);
file_put_contents('file.txt',$file);

?>

вот проверь чтоб не говорил что не работает

MiladyX
На сайте с 23.09.2008
Offline
65
#9

Да ничего не выдаёт, права стоят, я же записываю туда строки перед этим.

S
На сайте с 28.10.2005
Offline
319
#10


<?php

$t = file ('text.txt');

$ct = count($t);

for ($i=0; $i<$ct; ++$i) {

if (!preg_match('/^12/', $t[$i])) {

$out[] = $t[$i];

}

}

file_put_contents ('tetx.txt', $out);

?>

Так точно работает

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий