Как записать значение в конкретную строчку в файл? часть2

Vallar_ultra

Любитель выпить :)
Как записать значение в конкретную строчку в файл? часть2

Госпада! Я конечно всё понимаю, но всё-таки удалять заявление о том что код отрабатывает неправильно - это нонсенс!

Ещё разок попробую:
http://phpclub.ru/talk/showthread.php?s=&threadid=71351&rand=6
Там приведён РНР-код для перезаписи определённого значения в файле,
PHP:
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 )
        $fileString .= implode( "|", $row );
    $fp = fopen( $fileName, "w" );
    fwrite( $fp, $fileString );
    fclose( $fp );
}

$fileName = "file.txt";
$fileArray = file2Array( $fileName );

$fileArray[ Строка ][ Столбец ] = "Новые Денные";

array2File( $fileArray, $fileName );
так вот он у меня отрабатывает НЕ КОРРЕКТНО!!!! не знаю, я дурак или ещё чаво, но по факту: если запустить скрипт 5 раз подряд, то он вставит между строками 5 пустых!!!!

Я не могу понять, это у меня только так или нет?
 

Vallar_ultra

Любитель выпить :)
Ну и???
Ничего не работает! Что делать??? - читал, ответа так и не нашёл.....

Код идентичный, настройки РНР нормальные......
Я ж не говорю, что он совсем не работает.... я говорю о том что он работает не корректно(варнингов и ошибок нет), в этом весь и прикол! так вот мне интересно, повторояется ли ещё у кого-нить такой глюк?
 

Vallar_ultra

Любитель выпить :)
Это всё понятно, но вот ошибки я не вижу.... я ж опять-таки не утверждаю что код не верный, но раз есть такой глюк - значит где-то что-то не так. я прав? Вот Tor, у тебя этот код нормально отрабатывает? всмысле нету пустых строк после нескольких выполнений?
 

Vallar_ultra

Любитель выпить :)
:))))
Ещё немного, и я её наизусть выучу....
Я уже не первый год занимаюсь программированием под различные платформы, т.ч. рассказывать мне что такое отладка не стоит.... :)
Поиск в форуме результатов не дал :( вот по сему и спрашиваю:
нету пустых строк после нескольких выполнений или всё-таки есть?
 

Tor

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

Vallar_ultra

Любитель выпить :)
2chisto_tolyan:
Спасибо! значит всё-таки где-то я дурак....

2Tor:
Да вот нифига не от лени....
Честно, всё пересмотрел: ХЗ почему у меня такой глюк выползает...
А к наплевательскому отношению готов, особенно почитав основную массу постов на форуме.... очень много ненужных вопросов от модераторов.... оч. странно :\
 

SiMM

Новичок
> очень много ненужных вопросов от модераторов
Хренасе...

> Я уже не первый год занимаюсь программированием под различные платформы, т.ч. рассказывать мне что такое отладка не стоит....
Тогда ваше упорное нежелание отладить свой скрипт ещё более непонятно. Или до сих пор "отладка" для вас значило "отдать Васе Пупкину - пущай ищет ошибки"?
Вы бы хотя бы ман почитали по [m]file[/m] и [m]fopen[/m], и хотя бы эксперимента для попробовали wb
PS: вообще говоря приведённый код кривоват. И совершенно непонятно, зачем было создавать второй топик с тем же самым вопросом.
 

Vallar_ultra

Любитель выпить :)
2SiMM:
"отдать Васе Пупкину - пущай ищет ошибки" - ну уж это точно не так!
А использовать PHP я не так уж и давно начал.... :)
В работе с мануалом я действительно маленько ступил.

насчёт выноса в отдельный топик:
тут идея в том, что в том топике я тоже написал варриант решения проблемы, но т.к. забыл про существование rtrim(), то там я юзал RegEx.... на это мне было отвечено что я брежу, пить меньше надо и т.п.

Вот какой был код:
PHP:
$row=1;// нумер строки
$col=2;// нумер колонки
$file_name="1.txt";// имя файла

$fp =file($file_name);

$values=explode("|",$fp[$row]);// массив всех колонок строки
$values[$col]="БлаБлаБла";// меняем нужное значение
Изначально так:
PHP:
$fp[$row]=implode("|",$values)."\r\n";// склеиваем обратно строку
$out=preg_replace('/\r\n/', "\n",join('',$fp));// склеиваем файл и удаляем левые брейки
Но лучше
PHP:
$fp[$row]=rtrim(implode("|",$values))."\r\n";// склеиваем обратно строку
$out=join('',$fp);// склеиваем файл
PHP:
$fp = fopen ($file_name, "w+");
fwrite ($fp, $out);
fclose ($fp);
Ну а без rtrim() и preg_replace() этот код добавляет пустые строки после выполнения.... Сорри, но пришлось вынести в отдельную тему, т.к. мои сообщения были удалены.... только я не совсем понял почему все?
 

baev

‹°°¬•
Команда форума
Мда...
"Чукча -- не читатель. Чукча -- писатель."

Vallar_ultra, Вам уже написали:

хотя бы ман почитали по file и fopen, и хотя бы эксперимента для попробовали wb
(Намекаю: "ключевое слово" -- wb.)
 

SiMM

Новичок
Vallar_ultra, trim'ить и добавлять переводы строки при записи в любом случае придётся. Иначе существует риск, что в один прекрасный момент две строки сольются :) Думаю, что нужно для наступления этого момента - вы и сами догадаетесь :)
И wb - тоже не лишнее.
 

WMix

герр M:)ller
Партнер клуба
внимательный читатель увидит недописанный $
PHP:
    foreach( $array as row )
        $fileString .= implode( "|", $row );
я не тестировал, я просто написал его прям в форуме... показав как считать данные, как записать как изменить... возможно существуют и другие ошибки!!
 
Сверху