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

1. negative (12.09.2010 / 20:26)
Всем привет! Столкнулся с такой неразрешимой для меня проблемой. Есть файл, в нем несколько строк, строка разбита на ячейки с разделителем |
Сейчас пример выложу.

2. KOZZ (12.09.2010 / 20:30)
$a = file('file.txt');
foreach($a as $str){
$ex = explode('|',$str);
}
а дальше делай под свои нужды

3. negative (12.09.2010 / 20:32)
$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);
}


4. Удаленный (12.09.2010 / 20:32)
delete

5. negative (12.09.2010 / 20:34)
Приведенный пример перезаписывает да то что нужно в нужной ячейке, но он потом эту же информацию перезаписывает во все ячейки в строках идущих после строки $stroka то есть он взял измененную инфу о 7-й ячейке и потом во все строки в 7-ю ячейку штампует имененную информацию, а нужно только в той, в которой требуется

6. negative (12.09.2010 / 20:37)
МеталлоgетектоР eGo это если вся инфа в строке 0 записана. Тут по иному все. Тут каждая строка содержит свои ||

7. negative (12.09.2010 / 20:45)
Наглядно:

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-й ячейке тоже вносятся изменения, хотя они там не нужны. Только в первой строке надо. Это пример

8. KOZZ (14.09.2010 / 10:10)
6, так это и есть для каждой строки, т.к. foreach пробегает по каждой строке

9. negative (15.09.2010 / 19:16)
Да, согласен. Это один из вариантов. Это без разницы это только начало. Проблема то в конце выражения всего. Допустим я укажу $ex[7]=1; как потом записать измененную информацию в файл что бы он оставил все как было а изменил только ex[7] в нужной строке

10. negative (16.09.2010 / 15:55)
Получается буд-то он перезаписывает буфер обмена новой информацией и штампует потом уже с обновлением, хотя по идее он не должен этого делать.

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

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

11. KOZZ (16.09.2010 / 16:03)
9, 10, неосилил

12. Вантуз-мен (16.09.2010 / 16:43)
<?php
function replace_lines($files, $lines, $text){

if (file_exists($files)){
if ($lines!==""){
if ($text!=""){

$file = file($files);
$fp = fopen($files, "a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);

foreach($file as $key=>$val){ 

if ($lines==$key) {
fputs($fp,"$text\r\n");

} else {

fputs($fp,$val);
}
}

fflush($fp);
flock ($fp,LOCK_UN);
fclose($fp);
}}}
}


13. negative (17.09.2010 / 01:57)
Vantuz, благодарю!

URL: https://visavi.net/topics/13621