Перезаписать значение в строке (в файле)

Ulen

Новичок
Всем доброго вечера!
Суть проблемы:
Есть txt файл, куда пишутся данные в таком виде: 1-[a,b,c,d,e]
1 - это id, а буквы в квадратных скобках - определенные данные.

Возникла необходимость переписать эти данные в скобках. Например 'a' переписать на 'f', а 'b', 'c', 'd', 'e' оставить нетронутыми. При этом вместо [a,b,c,d,e] может быть [1,1,1,1,1], [1,2,3,4,5] и т.д.
Т.е мы не знаем точно, что находится там.

Вроде начал делать и "завис":
PHP:
$uid = 1;
$data = file('file.txt');
        foreach($data as $line) {
          $id = explode('-', $line);
          if($uid == $id[0]) {
            preg_match_all('|\[(.*?)\,(.*?)\,(.*?)\,(.*?)\,(.*?)\]|', $line, $s);
              # получили массив с данными из квадратных скобок: $s[1][0] это 'a', $s[2][0] это 'b' и т.д
            
        
        
            }
        }
Ф-ия сохранения в файл у меня выглядит так:
PHP:
function save($data, $t, $s) {
$f = fopen($s, $t);
flock($f, LOCK_EX);
fwrite($f, $data);
fflush($f);
flock($f, LOCK_UN);
fclose($f);
}
А вот как дальше так и не понял(
 
Последнее редактирование:

sakon

П..и.н..ок
Нагородил...
preg_match_all здесь не нужен. Достаточно explode.
А в общем то здесь и explode лишние.
Достаточно strpos, substr и str_replace
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
PHP:
print_r(str_getcsv(str_replace(']','',str_replace('-[',',',$string))))
 

Ulen

Новичок
А я так сделал:
PHP:
function rewrite($dat, $flag) {
  $data = file('file.txt');
  $count = count($data);
    for ($i=0; $i<$count; $i++) {
      list($id, $txt) = explode('-', $data[$i]);
        if ($uid == $id) {
          preg_match_all('|\[(.*?)\,(.*?)\,(.*?)\,(.*?)\,(.*?)\]|', $txt, $s);

          if ($flag == 1) $s[1][0] = $dat;
          if ($flag == 2) $s[2][0] = $dat;
          if ($flag == 3) $s[3][0] = $dat;
          if ($flag == 4) $s[4][0] = $dat;
          if ($flag == 5) $s[5][0] = $dat;

          $data[$i] = $uid.'-'.'['.$s[1][0].','.$s[2][0].','.$s[3][0].','.$s[4][0].','.$s[5][0].']';
          save(implode('', $data),'w+','file.txt');
        }
    }
}
Остается передать в функцию текст и флажок, чтобы определить какое значение перезаписать.

Щас попробую по другому тогда :) Спасибо!
 
Последнее редактирование:

antson

Новичок
Партнер клуба
$data = file('file.txt'); - хапнул оперативки на размер файла
save в цикле - насилуешь операционку операциями открытия/закрытия файла и т.д., на каждую строку файла.
 
Сверху