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

sakon

П..и.н..ок
netmac
Зачем ты прелогаешь ссылку на документацию которая "конечно старовата".
Брать подобные вещи надо из официальных источников.
http://php.rinet.ru/docs.php
 

Dimexio

Новичок
Автор оригинала: Dimexio
А как если неопределено сколько строк в файле? Я поэтому и писал, что найти строку по пользователю.
В общем: найти необходимого пользователя и изменить необходимую ячейку, ячейки могут быть все заполнены. Например:

user1|zn1|zn2|zn3|zn4|
user2|zn1|zn2|zn3|zn4|
user3|zn1|zn2|zn3|zn4|
user4|zn1|zn2|zn3|zn4|
....................... n записей

необходимо найти user3 и изменить в нём запись zn1 и zn4

как это сделать в PHP???
 

sakon

П..и.н..ок
Dimexio
Ты никак вернулся? Не уж то время появилось?

-~{}~ 08.12.05 21:49:

Так.
И чем по твоему эта задача отличается от предыдущей?
 

netmac

Новичок
Берем весь файл функцией file в массив.
Получаем массив строк файла и идем по нему в цикле.

В цикле:
Бьем строку функцией $arr = explode("|", строка) на ячейки.
В твоем случае каждая будет биться на пять значений.
т.е. в массиве $arr 5 элементов от 0 до 4

Проверяем if($arr[0] == "user3") то $arr[2]="то что нужно"

Объеденяем массив arr назад в строку функцией implode с тем же разделителем |

Записываем новую строку в файл функцией fputs.

-~{}~ 08.12.05 21:55:

Зачем ты прелогаешь ссылку на документацию которая "конечно старовата".
Брать подобные вещи надо из официальных источников.
http://php.rinet.ru/docs.php [/QUOTE]
Она полностью русская в отличие от оффициальной.
Для начала я думаю то что ему нужно.
 

sakon

П..и.н..ок
netmac
PHP:
if($arr[0] == "user3") то $arr[2]="то что нужно"
Ты с размерностью ничего не напутал? :)

Пользоваться надо ОФИЦИАЛЬНОЙ документацией.
 

netmac

Новичок
Напутал :)
Что-то глюкануло что надо заменить zn2

Чтобы заменить zn1 и zn4
делаем $arr[1]= и $arr[4]=

-~{}~ 08.12.05 22:00:

Главное не забывать пользоваться головой, а какая документация не так уж и важно.
 

Dimexio

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

sakon

П..и.н..ок
На. И вали. Халявщиков здесь нелюбят.
PHP:
<?php
$fr =  file('test.txt');
for($i=0;$i<count($fr);$i++)
{
        $arr_file[$i] = explode('|',$fr[$i]);
}
for ($i=0;$i<count($arr_file);$i++)
{
        if(trim($arr_file[$i][0])=='user3')
        {
                $arr_file[$i][3] = 'test3';
                $fo=fopen('test.txt','w+');
                foreach ($arr_file as $mass)
                {
                        $mass = implode ('|',$mass);
                        fwrite($fo,$mass,1024);
                }
                fclose($fo);
        }
}
?>
-~{}~ 08.12.05 22:12:

netmac
Нет. О том, что массив двухмерный.
 

sakon

П..и.н..ок
>А почему fwrite да еще с параметром 1024 а не fputs?
По религиозным соображениям.
 

netmac

Новичок
Я посмотрел мануал, оказывается fputs и fwrite - одно и тоже.
Век живи век учись. :)
 

SelenIT

IT-лунатик :)
Вариант развития идеи netmacа с учетом того, что у нас по сути CSV:
PHP:
$old = fopen('oldfile.csv','r');
$new = fopen('newfile.csv','w');
while ($record = fgetcsv($old, 1024, '|')) {
   if ('user3' == $record[0]) {
      $record[3] = 'new text'; // и т.п.
  }
  fwrite($new, implode('|', $record) . "\n");
}
fclose($old);
fclose($new);
rename('newfile.csv', 'oldfile.csv');
 

SelenIT

IT-лунатик :)
sakon
Точно, спасибо.
P.S. В твоем примере в file() тоже какой-то странный второй параметр... ;)
 
Сверху