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

Форум PHP

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

 

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

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

тема: Сравнение двух файлов по строкам !
 
 автор: moriline   (29.07.2006 в 12:16)   письмо автору
 
 

Здравствуйте ! есть такой код :
<?php
$new = "mail@mail.ru.bak";
$old = "mail@mail.ru";
$sh = fopen($old, "r") or die("File ($old) does not exist!");
$mail = fopen($new, "r") or die("File ($new) does not exist ! ");

while (!feof($mail))
{
$charsh = fgetss($sh, 100);
$charmail = fgetss($mail, 100);
if ((strcmp($charmail , $charsh )) == 0) {
$f=0;
echo "$charsh" . "$f". "\n";
}
else {
$charsh = str_replace($charsh,$charmail, $charsh);
$f=1;$char .= $charsh;
};

} ;
echo "$char" . "\n";
?>
и мне нужно, чтобы если совпадает первый файл со вторым , то ничего не делать , а если не совпадает то вывести на экран все из файла mail@mail.ru.bak - а именно те строки которые не совпадают с файлом mail@mail.ru !! а у меня такая с этим проблема - выводится только до того места , где заканчиваются строки в файле mail@mail.ru ! если файл mail@mail.ru меньше по строкам файла mail@mail.ru.bak , то выводится только до той строки где заканчиваются строки в файле mail@mail.ru !
Заранее всем спасибо кто попытается мне в этом помочь !

   
 
 автор: Ziq   (29.07.2006 в 13:05)   письмо автору
 
   для: moriline   (29.07.2006 в 12:16)
 

Сам подход является неправильным, насколько я понял суть задачи.

Если файлы небольшие, то можно вообще поступить так

<?php
$file1 
file_get_contents("mail@mail.ru");
$file2 file_get_contents("mail@mail.ru.bak");

if(!
$file1 != $file2) echo $file2;
?>


Если файлы большие, то в принципе достаточно сравнить их размеры (если их содержание отличается по кол-ву символов)

<?
if(filesize("mail@mail.ru") != filesize("mail@mail.ru.bak")) echo file_get_contents("mail@mail.ru.bak");
?>


Может что не так понял и разбор по строкам является обязательным

   
 
 автор: RV   (29.07.2006 в 15:13)   письмо автору
 
   для: Ziq   (29.07.2006 в 13:05)
 

вычислить md5 обеих файлов и сравнить полученные хеши.

   
 
 автор: Holsten Bier   (29.07.2006 в 15:23)   письмо автору
 
   для: RV   (29.07.2006 в 15:13)
 

Здесь требуется выводить несовпадающие строки, так что справиться можно только при построчном сравнении.

   
 
 автор: RV   (29.07.2006 в 15:42)   письмо автору
 
   для: Holsten Bier   (29.07.2006 в 15:23)
 

справится можно двумя функциями
file()
array_diff_assoc()

   
 
 автор: moriline   (29.07.2006 в 23:33)   письмо автору
 
   для: RV   (29.07.2006 в 15:42)
 

а нельзя ли поподробнее с функцией array_diff_assoc ???
скорее всего это оно и есть ! и как было сказано выше " нужно именно по строкам найти расхождение и там где это расхождение есть заменить строки в файле mail@mail.ru на строки из файла mail@mail.ru.bak ! может подскажешь как это изящнее сделать ?

   
 
 автор: RV   (30.07.2006 в 05:20)   письмо автору
 
   для: moriline   (29.07.2006 в 23:33)
 

там в мануале все неплохо расписано. даже по русски.
вместо array_diff_assoc надо array_diff

   
 
 автор: moriline   (30.07.2006 в 09:55)   письмо автору
 
   для: RV   (30.07.2006 в 05:20)
 

Да прочитал я все про эти функции ! но мне кажется что лучше использовать функцию array_diff_assoc !!! Вот код который работает !!!
<?php
$access1 = "mail@mail.ru.bak";
$array1 = @file($access1);
$access2 = "mail@mail.ru";
$array2 = @file($access2);

$result = array_diff_assoc($array1, $array2);
$x=0;
while ($x < sizeof($result))
{
echo "$result[$x]" . "\n";
$x++;
}
?>
И все выводит на экран и все прекрасно ! Спасибо за подсказку ! хотя я надеялся что помогут кодом а не подсказкой ! Всего всем хорошего и еще раз спасибо всем кто думал и старался ! Тема закрыта .

   
Rambler's Top100
вверх

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