Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Запись в файл: как до- или пере-записать столбец без перезаписи всей строки?
Форумы портала PHP.SU » » Вопросы новичков » Запись в файл: как до- или пере-записать столбец без перезаписи всей строки?

Страниц (1): [1]
 

1. Dorn - 04 Ноября, 2022 - 01:11:46 - перейти к сообщению
Уважаемые форумчане, нашел вот такое решение для вопроса, но вылетает ошибка.
Скажите, пожалуйста, что тут не так?


file.txt:
000|000|000|000|000|
111|Задача перезаписать или добавить сюда 123456|111|111|111|
111|111|111|111|111|

PHP:
$fileName = "file.txt";
function file2Array( $fileName ){
$out = array();
$rows = file( $fileName );
foreach( $rows as $rowNr => $row )
$out[$rowNr] = explode( "|", $row );
return $out;
}

function array2File( $array, $fileName ){
$fileString = "";
foreach($array as row) //PHP ругается на эту строку syntax error, unexpected ')', expecting '['
$fileString .= implode( "|", $row );
$fp = fopen( $fileName, "w" );
fwrite( $fp, $fileString );
fclose( $fp );
}

$fileArray = file2Array( $fileName );
$fileArray[1][2] = '123456';
array2File( $fileArray, $fileName );
2. Vladimir Kheifets - 04 Ноября, 2022 - 20:49:19 - перейти к сообщению
Dorn пишет:
Уважаемые форумчане, нашел вот такое решение для вопроса, но вылетает ошибка.
Скажите, пожалуйста, что тут не так?


file.txt:
000|000|000|000|000|
111|Задача перезаписать или добавить сюда 123456|111|111|111|
111|111|111|111|111|

PHP:
$fileName = "file.txt";
function file2Array( $fileName ){
$out = array();
$rows = file( $fileName );
foreach( $rows as $rowNr => $row )
$out[$rowNr] = explode( "|", $row );
return $out;
}

function array2File( $array, $fileName ){
$fileString = "";
foreach($array as row) //PHP ругается на эту строку syntax error, unexpected ')', expecting '['
$fileString .= implode( "|", $row );
$fp = fopen( $fileName, "w" );
fwrite( $fp, $fileString );
fclose( $fp );
}

$fileArray = file2Array( $fileName );
$fileArray[1][2] = '123456';
array2File( $fileArray, $fileName );


Добрый день!
Если совсем поверхностно,только по синтаксису, то в строке
потерян символ $ перед row, т.е. это интепретируется как константа, а не переменная.
Удачи!
3. Dorn - 08 Ноября, 2022 - 17:55:30 - перейти к сообщению
Невнимательность однако моя. Владимир, большое спасибо, я счастлив, оказывается так и вправду можно делать, всё работает, годный код! Улыбка


Vladimir Kheifets пишет:
Dorn пишет:
Уважаемые форумчане, нашел вот такое решение для вопроса, но вылетает ошибка.
Скажите, пожалуйста, что тут не так?


file.txt:
000|000|000|000|000|
111|Задача перезаписать или добавить сюда 123456|111|111|111|
111|111|111|111|111|

PHP:
$fileName = "file.txt";
function file2Array( $fileName ){
$out = array();
$rows = file( $fileName );
foreach( $rows as $rowNr => $row )
$out[$rowNr] = explode( "|", $row );
return $out;
}

function array2File( $array, $fileName ){
$fileString = "";
foreach($array as row) //PHP ругается на эту строку syntax error, unexpected ')', expecting '['
$fileString .= implode( "|", $row );
$fp = fopen( $fileName, "w" );
fwrite( $fp, $fileString );
fclose( $fp );
}

$fileArray = file2Array( $fileName );
$fileArray[1][2] = '123456';
array2File( $fileArray, $fileName );


Добрый день!
Если совсем поверхностно,только по синтаксису, то в строке
потерян символ $ перед row, т.е. это интепретируется как константа, а не переменная.
Удачи!
4. Dorn - 11 Ноября, 2022 - 13:16:14 - перейти к сообщению
Скажите, пожалуйста, а если я хочу именно дописать, то как могу я это сделать?
Наверное, через file_put_contents, но пока знаний не хватает )




Vladimir Kheifets пишет:
Dorn пишет:
Уважаемые форумчане, нашел вот такое решение для вопроса, но вылетает ошибка.
Скажите, пожалуйста, что тут не так?


file.txt:
000|000|000|000|000|
111|Задача перезаписать или добавить сюда 123456|111|111|111|
111|111|111|111|111|

PHP:
$fileName = "file.txt";
function file2Array( $fileName ){
$out = array();
$rows = file( $fileName );
foreach( $rows as $rowNr => $row )
$out[$rowNr] = explode( "|", $row );
return $out;
}

function array2File( $array, $fileName ){
$fileString = "";
foreach($array as row) //PHP ругается на эту строку syntax error, unexpected ')', expecting '['
$fileString .= implode( "|", $row );
$fp = fopen( $fileName, "w" );
fwrite( $fp, $fileString );
fclose( $fp );
}

$fileArray = file2Array( $fileName );
$fileArray[1][2] = '123456';
array2File( $fileArray, $fileName );


Добрый день!
Если совсем поверхностно,только по синтаксису, то в строке
потерян символ $ перед row, т.е. это интепретируется как константа, а не переменная.
Удачи!
5. LML - 11 Ноября, 2022 - 14:59:28 - перейти к сообщению
Dorn пишет:
Скажите, пожалуйста, а если я хочу именно дописать, то как могу я это сделать?
Наверное, через file_put_contents, но пока знаний не хватает )


Конечно же, и лучше и проще будет использование file_put_contents.

PHP:
скопировать код в буфер обмена
  1. file_put_contents($fileName, $fileString, FILE_APPEND|LOCK_EX);


Флаг FILE_APPEND указывает, что дописывать необходимо в конец файла.
Флаг LOCK_EX блокирует запись данного файла одновременно кем-нибудь другим.

В Вашем случае можно только сменить тип доступа с w на a.

PHP:
скопировать код в буфер обмена
  1. $fp = fopen( $fileName, "a" );


'w' - Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.

'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются в конец.
6. Dorn - 18 Ноября, 2022 - 17:47:37 - перейти к сообщению
Ну нет, конечно. Так оно не работает, вы же код точно видели.

LML пишет:
Dorn пишет:
Скажите, пожалуйста, а если я хочу именно дописать, то как могу я это сделать?
Наверное, через file_put_contents, но пока знаний не хватает )


Конечно же, и лучше и проще будет использование file_put_contents.

PHP:
скопировать код в буфер обмена
  1. file_put_contents($fileName, $fileString, FILE_APPEND|LOCK_EX);


Флаг FILE_APPEND указывает, что дописывать необходимо в конец файла.
Флаг LOCK_EX блокирует запись данного файла одновременно кем-нибудь другим.

В Вашем случае можно только сменить тип доступа с w на a.



'w' - Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.

'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются в конец.
7. Dorn - 19 Ноября, 2022 - 14:20:50 - перейти к сообщению
Если это не ярый костыль (вроде вполне норм), то вот решение:
$fileArray[1][1] = $fileArray[1][1].'123456';
8. Vladimir Kheifets - 19 Ноября, 2022 - 22:00:37 - перейти к сообщению
Dorn пишет:
Если это не ярый костыль (вроде вполне норм), то вот решение:
$fileArray[1][1] = $fileArray[1][1].'123456';


Добрый день!
м.б. лучше было бы дороботать функцию array2File
PHP:
скопировать код в буфер обмена
  1. function array2File( $array, $fileName, $i, $j, $option, $value){
  2.         $fileString = "";
  3.         if($option == "add")
  4.                 $array[$i][$j] .= $value;
  5.         if($option == "replace")
  6.                 $array[$i][$j] = $value;
  7.         foreach($array as $row)
  8.         $fileString .= implode( "|", $row ).PHP_EOL;
  9.         file_put_contents($fileName, $fileString);
  10. }
Удачи!

 

Powered by ExBB FM 1.0 RC1