Работа с информацией в файле

Печать RSS
380

N
Автор
Пришелец
0
Всем привет! Столкнулся с такой неразрешимой для меня проблемой. Есть файл, в нем несколько строк, строка разбита на ячейки с разделителем |
Сейчас пример выложу.
K

Транклюкаторщик
0
$a = file('file.txt');
foreach($a as $str){
$ex = explode('|',$str);
}
а дальше делай под свои нужды
N
Автор
Пришелец
0
$file = file("primer.dat");
$primer_data=explode("|",$file[$stroka]);
for ($i=0;$i< sizeof($file);$i++) {
if ($stroka==$i){
$primer_data[7]=1;
$text=$primer_data[0].'|'.$primer_data[1].'|'.$primer_data[2].'|'.$primer_data[3].'|'.$primer_data[4].'|'.$primer_data[5].'|'.$primer_data[6].'|'.$primer_data[7].'|'.$primer_data[8].'|';
}
}
$text=no_br($text);
$fp=fopen("primer.dat","w");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);
for ($i=0;$i< sizeof($file);$i++){
if ($stroka==$i){
fputs($fp,"$text\r\n");
}else{
fputs($fp2,$file[$i]);
}
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
unset($text);
}

Дух
0
delete
N
Автор
Пришелец
0
Приведенный пример перезаписывает да то что нужно в нужной ячейке, но он потом эту же информацию перезаписывает во все ячейки в строках идущих после строки $stroka то есть он взял измененную инфу о 7-й ячейке и потом во все строки в 7-ю ячейку штампует имененную информацию, а нужно только в той, в которой требуется
N
Автор
Пришелец
0
МеталлоgетектоР eGo это если вся инфа в строке 0 записана. Тут по иному все. Тут каждая строка содержит свои ||
N
Автор
Пришелец
0
Наглядно:

0 строка: 0|1|2|3|4|5|6|7|8
1 строка: 0|1|2|3|4|5|6|7|8
2 строка: 0|1|2|3|4|5|6|7|8
3 строка: 0|1|2|3|4|5|6|7|8
4 строка: 0|1|2|3|4|5|6|7|8

Их может быть много. в 1-й строке меняю в 7 ячейке информацию. в 0-й как и положенно остается старая информация, а вот помимо 1-й строки в строках 2,3,4 в 7-й ячейке тоже вносятся изменения, хотя они там не нужны. Только в первой строке надо. Это пример
Изменил: negative (12.09.2010 / 20:49)
K

Транклюкаторщик
0
6, так это и есть для каждой строки, т.к. foreach пробегает по каждой строке
N
Автор
Пришелец
0
Да, согласен. Это один из вариантов. Это без разницы это только начало. Проблема то в конце выражения всего. Допустим я укажу $ex[7]=1; как потом записать измененную информацию в файл что бы он оставил все как было а изменил только ex[7] в нужной строке
N
Автор
Пришелец
0
Получается буд-то он перезаписывает буфер обмена новой информацией и штампует потом уже с обновлением, хотя по идее он не должен этого делать.

А вот это из-за чего вообще не понятно:

1: 0|0|0|0|0|0|0|0|0|0
2: 0|0|0|0|0|0|0|1|0|0
3: 0|0|0|0|0|0|0|1|0|0
4: 0|0|0|0|0|0|0|1|0|0
5: 0|0|0|0|0|0|0|1|0|0

$stroka=3;
$line_data[7]="";

$text=$line_data[0].'|'.$line_data[1].'|'.$line_data[2].'|'.$line_data[3].'|'.$line_data[4].'|'.$line_data[5].'|'.$line_data[6].'|'.$line_data[7].'|'.$line_data[8].'|'.$line_data[9].'|';

Записываем $text если в лупе $i достигает значения $stroka, остальное в файл из буфера.
По идее строка 3 должна принять такой вид:
3: 0|0|0|0|0|0|0||0|0
а она как была так и остается
3: 0|0|0|0|0|0|0|1|0|0

а если к примеру $stroka будет равна 2. То после записи станет

1: 0|0|0|0|0|0|0|0|0|0
2: 0|0|0|0|0|0|0||0|0
3: 0|0|0|0|0|0|0||0|0
4: 0|0|0|0|0|0|0||0|0
5: 0|0|0|0|0|0|0||0|0

Вместе со второй строкой он на "" скинет все следом идущие.

Затем меняем $stroka на 3 а $line_data[7]=1;
Получаем:
1: 0|0|0|0|0|0|0|0|0|0
2: 0|0|0|0|0|0|0||0|0
3: 0|0|0|0|0|0|0|1|0|0
4: 0|0|0|0|0|0|0|1|0|0
5: 0|0|0|0|0|0|0|1|0|0
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск