Перезаписать файл в определенной строке

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
words.txt содержит 2 строки:
1111 (нужно заменить эту строку на 0000)
2222

Выполняю код:
Код:
$c = file('words.txt');
    $c[0]++;
    $fp = fopen('words.txt','w');
    fputs($fp,$c[0]);
    fclose($fp);

После выполнения кода, исчезает вторая строка 2222. Хелп!
 
PHP:
    $c = file('words.txt');
    $c[0]="0000\n";
    $result = implode($c);  
    $fp = fopen('words.txt','w');
    fputs($fp,$result);
    fclose($fp);
 
Код:
$c = file('words.txt');
    $c[0]++;
    $fp = fopen('words.txt','w');
    fputs($fp,$c[0]);
    fclose($fp);

Если исправлять это то наврное вот так надо.

Код:
$c = file('words.txt');
$c[0]--; //или как в примере выше $c[0] = "0000"; или любую другую строку на любое другое  значение
file_put_contents('words.txt', implode("\n", $c));
 
Если исправлять это то наврное вот так надо.

Код:
$c = file('words.txt');
$c[0]--; //или как в примере выше $c[0] = "0000"; или любую другую строку на любое другое  значение
file_put_contents('words.txt', implode("\n", $c));
При чтении файла в массив у нас уже в каждом элементе, в конце, будет перевод строки. Поэтому вот эта конструкция:
PHP:
implode("\n", $c);
даст отличный от оригинала результат, если исходный файл был:
Код:
11111
22222
33333
44444
то в результате выполнения получится:
Код:
00000
22222

33333

44444
 
Вообще да, немного я ошибся.
Тогда так:
Код:
$c = array_map('trim', file('words.txt'));
$c[0]--; //или как в примере выше $c[0] = "0000"; или любую другую строку на любое другое  значение
file_put_contents('words.txt', implode("\n", $c));

Если придираться к мелочам, то мой первый вариант бы и не сработал, тк $c[0] не было числом.
 
Вообще да, немного я ошибся.

Не льсти себе ошибок у тебя куча :-]
Например зачем делать
PHP:
$c = array_map('trim', file('words.txt'));
если есть гораздо более быстрое решение через флаг функции file?
PHP:
$c = file('words.txt', FILE_IGNORE_NEW_LINES);

$c[0]--; - для "1111" вернёт "1110"

-------------------------------------------------------------------------------------------​

Второй пост после вопроса ТС содержит наиболее правильное решение для маленьких файлов.
Для удобочитаемости можно оптимизировать до:
PHP:
    $c = file('words.txt');
    $c[0]="0000\n"; // \n - для unix или \r\n - для win

    file_put_contents('words.txt', $c); //эта функция сама implode сделает
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху