[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнение файлов и поиск отличий
Страницы: 1, 2
ReWrite
Помогите пожалуйста написать скрипт, не могу разобраться никак.
Требуется создать на языке программирования PHP исходный код программы,
выполняющей построчное сравнение файлов.
Входящая информация: два локальных текстовых файла объемом до 10 Мб. каждый.
Исходящая информация: номера и длины строк во втором файле, которые были
изменены по ставнению с первым. Это могут быть как строки с изменениями, так и
новые строки.
Заранее спасибо.
Игорь_Vasinsky
$file1 = file('/file1.txt');
$file2 - file('/file2.txt');

$result = array_diff($file1, $file2);

if(!empty($result))
echo 'Файлы то разные...';
else
echo 'Файлы идентичны!';


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ReWrite
выполняющей построчное сравнение файлов.
Игорь_Vasinsky
да хоть по символьное laugh.gif

почитай про array_diff - если есть различие в массивах - она вернёт, если она вернёт не пустой массив - значит массивы не идентичны.

что делает file() ?

считывает файл и создает массив - при этом каждая строка файла == элемент массива.


у вас вообще нет навыков?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ReWrite
<?php

$sA = file("test1.txt");
if(!$sA)
{
echo("Ошибка открытия файла");
}

$sB = file("test2.txt");
if(!$sB)
{
echo("Ошибка открытия файла");
}


foreach($sB as $keyB => $valueB)
{
$key = array_search($valueB, $sA);
if (!$key)
{
echo("Line: ".($keyB+1)." Lenght: ".(strlen($valueB))."<br>" );
}
}


?>


написал так, но если строка например "a+1" была еще где нибудь добавлена, то он ее как новую уже не покажет
Игорь_Vasinsky
Цитата
if(!$sA)
{
echo("Ошибка открытия файла");
}

WTF? если условие для 2 имеющихся файлов, то для чего это?

Цитата
$key = array_search($valueB, $sA);
if (!$key)


.....

вы хотите по строчно сравнить файлы?

array_diff - код выше. выведите $result - там вся разница. про мануал слышали?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ReWrite
спасибо, доходило просто медленно )))
Игорь_Vasinsky
да не за что - просто если предлагают функции, штатные функции - глядите в мануал - там подробное описание.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ReWrite
файл 1
ф-я выделения изменений
в строках только уже текстов,
а не индентификаторов,
т.е. эта ф-я получает на вход тексты
Начальный и Измененный,
сама создает уникальную таблицу,
переводит эти тексты
test1
test2

файл 2
ф-я выдiления изменений
в строках только уже текстов,
а не индентификаторов,
test2
test1
это новая строка
т.е. эта ф-я получает на вход тексты
сама создает уникальную таблицу,
переводит тексты
еще одна строка
в строках только уже текстов,
test1
test1
test1
test1
test1

и уже не находит (((
Игорь_Vasinsky
а ты проверь в 2 стороны, отличие одного файла от другого и другого от одного

так и лень в мануал заглянуть?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ReWrite
$result1 = array_diff ($sB,$sA);
$result2 = array_diff ($sA,$sB);
$result = array_diff ($result1,$result2);
foreach ($result as $key => $value)
{
echo("Line: ".($key+1)." Lenght: ".(strlen($value))."<br>" );
}

результат тот же (((
Игорь_Vasinsky
Цитата
$result = array_diff ($result1,$result2);

.. взгляни в мануал.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ReWrite
<?php
if ($argc != 3 )
{
echo ("This is a command line PHP script with two option.<br>");
// echo ("Usage:".$argv[0]." <file1,file2>");
}
else
{
echo $argv[1],$argv[2];
}

$sA = file("test1.txt");
if(!$sA)
{
echo("Ошибка открытия файла");
}

$sB = file("test2.txt");
if(!$sB)
{
echo("Ошибка открытия файла");
}

$keyFound=array();
$i=0;


foreach($sB as $keyB => $valueB)
{
$key = array_search($valueB, $sA);
if (!$key)
{
echo("Line: ".($keyB+1)." Lenght: ".(strlen($valueB))."<br>" );
}
else unset($sA[$key]);
}
?>


так вроде работает, мануал не помог, или ссылку где смотреть напишите.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.