Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена данных в текстовом файле
 
 автор: Новичек   (15.02.2006 в 08:57)
 
 

Здравствуйте.
Как заменить данные в текстовом файле, к примеру в файде идут данные

1234
2345
5678
6543
76543

надо к примеру заменить 2 строку на данные 8765
???

   
 
 автор: kel911   (15.02.2006 в 09:36)   письмо автору
 
   для: Новичек   (15.02.2006 в 08:57)
 

Незнаю...

   
 
 автор: Loki   (15.02.2006 в 09:48)   письмо автору
 
   для: Новичек   (15.02.2006 в 08:57)
 

А почему именно вторую? конкретезируйте задачу.

   
 
 автор: Axxil   (15.02.2006 в 11:07)   письмо автору
 
   для: Новичек   (15.02.2006 в 08:57)
 

если файл не очень большой то можно так:

<?
$arr 
file($filename);
$arr[1]="8765\n";
$handler fopen($filename,'w+');
fwrite($handler,implode("",$arr));
fclose($handler);
?>

   
 
 автор: Новичек   (15.02.2006 в 11:24)
 
   для: Axxil   (15.02.2006 в 11:07)
 

kel911, а флудить то зачем ?

Loki 2 строка приведена для примера, а вообще то должно быть так, в форму вбивается значение которое находится в текстовом файле, на каком оно месте неизвестно, и это значение должно замениться на другое, которое также отсылается через форму.

Axxil спасибо, попробую.

   
 
 автор: Loki   (15.02.2006 в 11:39)   письмо автору
 
   для: Новичек   (15.02.2006 в 11:24)
 

тогда вот так

<? 
$value1
=8888;
$value2=4444;
$arr file($filename); 
foreach (
$arr as $key=>$val)
{
 if (
$val===$value2)
 
$arr[$key]=$value1
}
$handler fopen($filename,'w+'); 
fwrite($handler,implode("\n",$arr)); 
fclose($handler); 
?> 
Если файл большой, то file() лучше заменить на fopen+fgets

   
 
 автор: Eugene   (16.02.2006 в 01:06)
 
   для: Loki   (15.02.2006 в 11:39)
 

Тоесть рекомендуете считывать файл таким макаром (если он большой) ???
fgets же вроде считывает построчно...


$fd = fopen ("/tmp/inputfile.txt", "r");
while (!feof ($fd)) {
    $buffer = fgets($fd);
    echo $buffer;
}
fclose ($fd);

   
 
 автор: Loki   (16.02.2006 в 09:28)   письмо автору
 
   для: Eugene   (16.02.2006 в 01:06)
 

При этом мы не ограничены количеством доступной оперативки.

   
 
 автор: Новичек   (16.02.2006 в 07:43)
 
   для: Loki   (15.02.2006 в 11:39)
 

Не работает.
Может у кого еще будут какие варианты ???

   
 
 автор: Loki   (16.02.2006 в 09:27)   письмо автору
 
   для: Новичек   (16.02.2006 в 07:43)
 

ясный перец не работает. Файл-то небось под виндой создавали
перед сравниением вставьте

$val=trim($val);

   
 
 автор: Новичек   (16.02.2006 в 09:34)
 
   для: Loki   (16.02.2006 в 09:27)
 

Все равно не работает.

   
 
 автор: Loki   (16.02.2006 в 09:56)   письмо автору
 
   для: Новичек   (16.02.2006 в 09:34)
 

что именно не работает? приведите ваш код

   
 
 автор: Новичек   (16.02.2006 в 11:01)
 
   для: Loki   (16.02.2006 в 09:56)
 


<? 
$value1
=8888
$value2=4444;
$filename "12.txt"
$arr file($filename); 
$val=trim($val); 
foreach (
$arr as $key=>$val

if (
$val===$value2
$arr[$key]=$value1

$handler fopen($filename,'w+'); 
fwrite($handler,implode("\n",$arr)); 
fclose($handler); 
?>


текстовый файл


1234
7654
98765
4444
6543
ро76
987го


насколько я понимаю при запуске скрипта 4444 должно сменится на 8888, но оно не меняется, только добавляет кучу квадратиков между цифрами [][][] и после каждого запуска их становится все больше и больше.

   
 
 автор: Loki   (16.02.2006 в 11:24)   письмо автору
 
   для: Новичек   (16.02.2006 в 11:01)
 


<? 
$value1
=8888
$value2=4444
$filename "12.txt"
$arr file($filename); 
foreach (
$arr as $key=>$val
{
$val=trim($val);  
if (
$val===$value2
$arr[$key]=$value1

$handler fopen($filename,'w+'); 
fwrite($handler,implode("\n",$arr)); 
fclose($handler); 
?> 

   
 
 автор: Новичек   (16.02.2006 в 12:08)
 
   для: Loki   (16.02.2006 в 11:24)
 

Тоже самое, все равно не работает.

   
 
 автор: Loki   (16.02.2006 в 12:24)   письмо автору
 
   для: Новичек   (16.02.2006 в 12:08)
 


if ($val===$value2)

замените на

if ($val==$value2)

   
 
 автор: Новичек   (16.02.2006 в 12:28)
 
   для: Loki   (16.02.2006 в 12:24)
 

Не помогло

   
 
 автор: Loki   (16.02.2006 в 12:29)   письмо автору
 
   для: Новичек   (16.02.2006 в 12:28)
 

а у меня работает.

   
 
 автор: GлюК   (16.02.2006 в 22:35)   письмо автору
 
   для: Loki   (16.02.2006 в 12:29)
 

Там надо маленько подправить, и всё будет нормально работать. Нужно использовать не \n, а \r\n, если уж мы делаем trim + ещё тогда надо в массив после trim'a значения заносить. Короче, вот скрипт:

<?
$value1
=8888;
$value2=4444;
$filename "12.txt";
$arr file($filename);
foreach (
$arr as $key=>$val)
{
$val=trim($val);
if (
$val==$value2)
$arr[$key]=$value1;
else
$arr[$key]=$val;
}
$handler fopen($filename,'w+');
fwrite($handler,implode("\r\n",$arr));
fclose($handler);
?>

Проверил, всё работает!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования