Поиск внутри файла

Dimexio

Новичок
Поиск внутри файла

Здравствуйте господа программисты!
Я в PHP не силён, но очень нужно написать небольшой скрипт, который я сам сделать не могу. Пожалуйста помогите.

Есть файл в формате txt, записи в котором разделены на ячейки через символ «|»:
user1|||test||||
user2|||test||||
user3|||test||||
user4|||test||||

Необходимо найти строку с пользователем «user3» и вместо «test» написать «test2», незная что в ячейке 4 существует запись «test». Изменения записать в этот же файл.
Как это написать в PHP?
 

sakon

П..и.н..ок
>Как это написать в PHP?
Такие вопросы сходу ставят в тупик.. Сразу встречный вопрос - а на другом языке эту задачу выполнить можешь?
 

sakon

П..и.н..ок
теперь понятнее.
Сначала тебе надо прочитать файл по строкам в массив [m]file[/m] после чего разбить каждую строку массива функцией [m]explode[/m]
Для начала разберись с этим.
 

Dimexio

Новичок
в принципе это я понимаю, но при написании кода возникают много сложностей и вопросов. Хотелось бы попросить привести пример реализации в PHP-коде на основе приведённой задачи.
Если бы я ещё хорошо владел английским (php.net), то смог бы самостоятельно разобраться.
 

netmac

Новичок
Вот вариант для того что ты привел в первом посте.

<?php
$array = file("txt.txt");
for($i=0; $i<count($array); $i++){
if(preg_match ("/user3/", $array[$i])){
$array[$i] = preg_replace('/[^|]+([|\s]+)$/', "test2$1", $array[$i]);
}
echo $array[$i];
}
?>

На мой взгляд надо использовать регулярные выражения и функцию file().

\s в рег. выражении для учета символа переноса строки.
Остальное должно быть понятно.
 

sakon

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

Dimexio

Новичок
большое спасибо! попробую...
но если не сложно, распишите что делать дальше
 

sakon

П..и.н..ок
Dimexio
netmac
Если вы обратили внимание, то в файле есть разделитель - |
Это значит - для начала читаем про функцию [m]explode[/m]
 

Dimexio

Новичок
sakon!
>Если бы я ещё хорошо владел английским (php.net), то смог бы самостоятельно разобраться.
напиши
 

Dimexio

Новичок
Автор оригинала: netmac
Вот вариант для того что ты привел в первом посте.

<?php
$array = file("txt.txt");
for($i=0; $i<count($array); $i++){
if(preg_match ("/user3/", $array[$i])){
$array[$i] = preg_replace('/[^|]+([|\s]+)$/', "test2$1", $array[$i]);
}
echo $array[$i];
}
?>

На мой взгляд надо использовать регулярные выражения и функцию file().

\s в рег. выражении для учета символа переноса строки.
Остальное должно быть понятно.
Пользователя нашли... а как обратиться к необходимой ячейке???

-~{}~ 08.12.05 21:20:

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

netmac

Новичок
Пожалуй да.
Делай $array = explode("|", строка файла);
тебе так будет проще

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

просто на самом деле. потрать 2 часа.

тебе нужны функции file, explode, fscanf можно посмотреть для развития, implode, fputs возможно.
и постромть элементарный цикл.

по функциям все вопросы к Яндексу
 

netmac

Новичок
Я предлагаю тебе вот этот мануал
он конечно староват, но зато русский и будет лежать у тебя под рукой.
http://www.shmakov.net/go/http://web.php.net.ua/manual/download/php4_ru.chm
 
Сверху