ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

12.01.2009, 23:23
|
|
Постоянный
Регистрация: 21.08.2008
Сообщений: 302
Провел на форуме: 458686
Репутация:
-25
|
|
Сообщение от -=lebed=-
Как вставить некоторую строку в середину (в текущую позицию указателя) файла без затирания имеющихся там данных (на которые указывает тек. указатель)?
Условия: юзаем только один файл, не используем оперативн. память (массивы)
Ну допустим есть файл строк:
Код:
576iuh
jhgkjh
jhgjhjh
jhgjhhj
9878687
<-------- нужно вставить " hg788gjlо"
jhgfjhgjh - затруться
kjhh755
kglh
hgkjhj
Это вообще возможно? если делать fputs($f,$s); то данные затираются на этом месте, а надо бы сдвинуть...
По моему вот так:
|
|
|

12.01.2009, 23:21
|
|
Участник форума
Регистрация: 27.10.2008
Сообщений: 278
Провел на форуме: 1495545
Репутация:
242
|
|
-=lebed=-
PHP код:
<?
$tochange="jhgfjhgjh";
$changeto=" hg788gjlо";
$fr=fopen("file.txt", "r");
$fw=fopen("temp.txt","a");
while(!feof($fr)){
$line=fgets($fr,4096);
if($line==$tochange) $line=$changeto;
fwrite($fw,$line."\r\n");
}
copy("temp.txt","file.txt");
unlink("temp.txt");
fclose($fr);
fclose($fw);
?>
СОРРИ не заметил про один файл(((
Последний раз редактировалось preda1or; 12.01.2009 в 23:23..
|
|
|

12.01.2009, 23:21
|
|
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
Условия: юзаем только один файл, не используем оперативн. память (массивы)
Это так обязательно? Можно было бы символ переноса в данной строке заменить на \nТекст\n
|
|
|

12.01.2009, 23:26
|
|
Участник форума
Регистрация: 27.10.2008
Сообщений: 278
Провел на форуме: 1495545
Репутация:
242
|
|
-=lebed=-
PHP код:
<?
$tochange="jhgfjhgjh";
$changeto=" hg788gjlо";
$string="";
$fr = fopen("file.txt", "r+");
while(!feof($fr)){
$line=fgets($fr,4096);
$line=str_replace("\r","",$line);
$line=str_replace("\n","",$line);
$line=str_replace("\t","",$line);
if($line==$tochange) $line=$insert."\r\n".$line;
$string.=$line."\r\n";
}
fclose($fr);
$fr = fopen("file.txt", "r+");
fwrite($fr,$string);
fclose($fr);
?>
Последний раз редактировалось preda1or; 12.01.2009 в 23:36..
|
|
|

12.01.2009, 23:35
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
ну раз использовать только один файл и не использовать массивы, то например вот так:
PHP код:
<?php
$file = '1.txt';
$a = '9878687'; //После чего вставить
$b = 'hg788gjlо'; //Что вставить
$open = file_get_contents($file);
file_put_contents($file, str_replace($a, $a."\r\n".$b, $open));
?>
|
|
|

12.01.2009, 23:39
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Сообщение от .:EnoT:.
ну раз использовать только один файл и не использовать массивы, то например вот так:
PHP код:
<?php
$file = '1.txt';
$a = '9878687'; //После чего вставить
$b = 'hg788gjlо'; //Что вставить
$open = file_get_contents($file);
file_put_contents($file, str_replace($a, $a."\r\n".$b, $open));
?>
как бы этот пример как и все выше загружает файл в оперативную память
Последний раз редактировалось ntldr; 12.01.2009 в 23:41..
|
|
|

12.01.2009, 23:51
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
Сообщение от ntldr
как бы этот пример как и все выше загружает файл в оперативную память
Чтение файла это и подразумевает, без этого никак)
Поэтому я лишь привёл более-менее вменяемый и простой пример.
neval, не, там пустая строка образуется, если в конце перенос ставить)
|
|
|

12.01.2009, 23:55
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Сообщение от .:EnoT:.
Чтение файла это и подразумевает, без этого никак)
Поэтому я лишь привёл более-менее вменяемый и простой пример.
neval, не, там пустая строка образуется, если в конце перенос ставить)
ну это понятно, просто у лебедя там написано было так. ну в принципе наверно так возможно, но только на ассемблере.
а если файл очень большой можно читать его кусками
|
|
|

12.01.2009, 23:42
|
|
Moderator - Level 7
Регистрация: 13.12.2006
Сообщений: 531
Провел на форуме: 2127116
Репутация:
383
|
|
Сообщение от .:EnoT:.
ну раз использовать только один файл и не использовать массивы, то например вот так:
Или так? ))
PHP код:
<?php
$file = '1.txt';
$a = '9878687'; //После чего вставить
$b = 'hg788gjlо'; //Что вставить
$open = file_get_contents($file);
file_put_contents($file, str_replace($a, $a."\r\n".$b."\r\n", $open));
?>
|
|
|

12.01.2009, 23:49
|
|
Участник форума
Регистрация: 27.10.2008
Сообщений: 278
Провел на форуме: 1495545
Репутация:
242
|
|
как бы этот пример как и все выше загружает файл в оперативную память
я так понял что нельзя юзать просто массивы, а как ты выполнишь программу без использования оперативной памяти?o.O
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|