как заменить именно какуе-то строку в файле

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

Flanker

незнайка
как заменить именно какуе-то строку в файле

У меня два способа
1-ый: переписать файл, и где надо внести изменения.
2-ой: открыть файл как r+ , что б заменить третию строку я перевожу курсор на неё, используя два раза fgets() и fputs() изменяю.

Проблема: а если надо заменить 153-ю строку, что 152 раза использовать fgets()?!
fseek()=>не использую, потому-что он смещает побайтно, а каждая строка разного размера.
базы не используюю, так как это настроечный файл

Подскажите.

Спасибо.
 

Фанат

oncle terrible
Команда форума
а теперь проверьте эту замечательную теорию практикой.
 

RigVan

Постоянный член клуба
проще так:
PHP:
$line="1"; # строка, которую нужно изменить
$replace="новая строка"; # на что нужно изменить

$file=file("my_file.txt");
$open=fopen("my_file.txt","w");

  for($i=0;$i<count($file);$i++)
  {
     if(($i+1)!=$line){fwrite($open,$file[$i]);}
     else{fwrite($open,$replace."\r\n");}
  }

fclose($open);
 

SelenIT

IT-лунатик :)
RigVan
1. Чем этот способ отличается от
1-ый: переписать файл, и где надо внести изменения.
2. Что будет, если файл под Unix и символ новой строки - просто \n?
 

yUAC

Новичок
Эээ, вот второй способ вообще нельзя использовать, размер файла при таком способе записи изменить невозможно, и соответственно заменить отдельную строчку с изменением размера тоже нельзя. Хотя, может я просто неправильно понял топикстартера.
 

SiMM

Новичок
> второй способ вообще нельзя использовать, размер файла при таком способе записи изменить невозможно
Вы просто не умеете их готовить.
[m]ftruncate[/m]
Хотя, надо заметить, если длина строки замены превышает длину исходной - то Вы правы.
 

yUAC

Новичок
Так ещё никто же и не говорил, что 153 строка является последней... :)
 

SiMM

Новичок
> Так ещё никто же и не говорил, что 153 строка является последней...
Так никто и не говорил, что строка замены имеет отличную от первоначальной строки длину.
 

yUAC

Новичок
Почему бы и нет... Я вот в своё время думал, что всё же можно как-нибудь «раздвинуть» содержимое файла, не переписывая его целиком.

-~{}~ 21.08.06 00:03:

SiMM
Если не отличается, то другое дело, тогда второй способ по идее надёжнее и быстрее...
 

Фанат

oncle terrible
Команда форума
yUAC
если мне придётся закрыть эту тему из-за твоего словесного поноса, то ни в какую другую ты уже больше не напишешь.

Тема открыта только для автора.
 

Crazy

Developer
Автор оригинала: SiMM
> Так ещё никто же и не говорил, что 153 строка является последней...
Так никто и не говорил, что строка замены имеет отличную от первоначальной строки длину.
А кто-нибудь говорил, что она не идентична исходной? А то совсем красивое решение получается: просто ничего не делать. :)
 

SiMM

Новичок
> А кто-нибудь говорил, что она не идентична исходной?
А разве не для этого существуют уточняющие вопросы? Придёт тредстартер и всё уточнит ;)
 

yUAC

Новичок
Автор оригинала: Фанат
yUAC
если мне придётся закрыть эту тему из-за твоего словесного поноса, то ни в какую другую ты уже больше не напишешь.

Тема открыта только для автора.
Ты можешь выделить кусок темы в мусор, если тебе что-то не нравится.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху