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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Dorn
Отправлено: 04 Ноября, 2022 - 01:11:46
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2022  


Помог: 1 раз(а)




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


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 );
 
 Top
Vladimir Kheifets
Отправлено: 04 Ноября, 2022 - 20:49:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




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, т.е. это интепретируется как константа, а не переменная.
Удачи!
 
 Top
Dorn
Отправлено: 08 Ноября, 2022 - 17:55:30
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2022  


Помог: 1 раз(а)




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


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, т.е. это интепретируется как константа, а не переменная.
Удачи!
 
 Top
Dorn
Отправлено: 11 Ноября, 2022 - 13:16:14
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2022  


Помог: 1 раз(а)




Скажите, пожалуйста, а если я хочу именно дописать, то как могу я это сделать?
Наверное, через 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, т.е. это интепретируется как константа, а не переменная.
Удачи!
 
 Top
LML
Отправлено: 11 Ноября, 2022 - 14:59:28
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2021  


Помог: 1 раз(а)




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() не применима, записи всегда добавляются в конец.
 
 Top
Dorn
Отправлено: 18 Ноября, 2022 - 17:47:37
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2022  


Помог: 1 раз(а)




Ну нет, конечно. Так оно не работает, вы же код точно видели.

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() не применима, записи всегда добавляются в конец.

(Отредактировано автором: 18 Ноября, 2022 - 17:57:38)

 
 Top
Dorn
Отправлено: 19 Ноября, 2022 - 14:20:50
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июнь 2022  


Помог: 1 раз(а)




Если это не ярый костыль (вроде вполне норм), то вот решение:
$fileArray[1][1] = $fileArray[1][1].'123456';
 
 Top
Vladimir Kheifets
Отправлено: 19 Ноября, 2022 - 22:00:37
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 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. }
Удачи!

(Отредактировано автором: 19 Ноября, 2022 - 22:01:14)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB