Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PERL) открыть 2 файла и сравнить построчно / 10 сообщений из 10, страница 1 из 1
20.09.2005, 14:24
    #33278968
vidoq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
значится открываю я их вроде нормально. т.е.
Код: plaintext
1.
$file1= txt1.txt;
open(FILE,$file1) ... 
ну и так же 2 открываю.
далее пишу вот что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
while (<FILE>) {
chomp;
@mt=split;
while (<FILE2>) {
chomp;
@mt2=split;

if ($mt[ 0 ] ne $mt2[ 0 ]){
print "Heto4HocTb - $mt[0] $mt2[0]\n";
}

}}

результат такой, из первого файла берется 1 строка и проверяется со ВСЕМИ строками 2 файла.
а мне нужно, чтобы 1 строка проверялась с 1, 2 со 2, 3 с 3, итд... пока не закончатся файлы...
как???
...
Рейтинг: 0 / 0
20.09.2005, 14:33
    #33279001
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
vidoq wrote:
> результат такой, из первого файла берется 1 строка и проверяется со
> ВСЕМИ строками 2 файла.
> а мне нужно, чтобы 1 строка проверялась с 1, 2 со 2, 3 с 3, итд... пока
> не закончатся файлы...
> как???
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
open FH1,"file1";
open FH2,"file2";
$count = 0 ;
while($l1 = <FH1> && $l2=<FH2>){
	++$count;
	print "Diff line # $count: \n$l1 $l2" if ($l1 ne $l2);
}

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
20.09.2005, 15:35
    #33279184
nik2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
vidoq
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
while (<FILE>) {
chomp;
@mt=split;
while (<FILE2>) {
chomp;
@mt2=split;

if ($mt[ 0 ] ne $mt2[ 0 ]){
print "Heto4HocTb - $mt[0] $mt2[0]\n";
}

}}


...где только такую траву продают...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
24.10.2012, 14:58
    #38011502
mamontozavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
Добрый день, друзья!

Помогите с решением вот такой задачи..
Есть 2 файла содержимое каждого примерно следующее:
...
c462519cd902a89c494fdfefa9f424c5 file/datadump.txt
...
Но ессть отличия в checksum и пути до файла. Как сравнить построчно
1) с использованием массивов - получается релизовать только без разбиения.
2) как еще с помощью хешей это реализовать? :-( Надо сравнивать левую с правой частью 2х разных файлов.
...
Рейтинг: 0 / 0
26.10.2012, 11:19
    #38014246
nexoma
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
может применить diff и получить реальную разницу и уже потом с ней работать?
...
Рейтинг: 0 / 0
26.10.2012, 11:50
    #38014294
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
nexomaможет применить diff и получить реальную разницу и уже потом с ней работать?
+1
...
Рейтинг: 0 / 0
12.11.2012, 17:52
    #38035108
mamontozavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
nexoma,

diff к сожалению не вариант ибо он сравнивает секционно и попадаются одинаковые файлы.
Просто задача несколько усложнаяется тем что бывают одинаковые имена в одной части, но разные checksum. Вот как их отловить то((
...
Рейтинг: 0 / 0
13.11.2012, 10:06
    #38035739
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
...
Рейтинг: 0 / 0
13.11.2012, 13:25
    #38036175
mamontozavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
Ренат,

спасибо Ринат, я вот наваял код, котоырй сравнивает чуть лучше чем diff

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
#!/usr/bin/perl -w
use strict;

my $f1 = "/tmp/data_new/MANIFEST-new/MANIFEST.Package";
my $f2 = "/tmp/data-old/MANIFEST-old/MANIFEST.Package";


my $outfile = '/root/result.txt';

open (FD1,$f1) or die "Can not open file".$!."\n";
my %h1 = <FD1>;

#print "\n My Hash1 :" .%hash1."\n";

while(<FD1>){
        chomp;
        my ($key, $array) = split ' ';
        #print "Key eq : $key array eq : $array\n";

}
close(FD1);

open (FD2,$f2) or die "Can not open file".$!."\n";

my %h2 = <FD2>;

while(<FD2>){
#chomp;
my ($key, $array) = split ' ';

if ($h1{$_}){
        delete($h1{$_});
} else {
        $h2{$_}=0;
        }
}
close(FD2);

open(WR,$outfile) or die "Cannot write file: $!";

my @diff = list_diff(keys %h1, keys %h2);
print "Difference in keys: ", @diff, "\n" if @diff;

KEY:
foreach my $key (keys %h1) {
    next KEY unless exists $h2{$key};
    my @diff = list_diff(@{ $h1{$key} },@{ $h2{$key} });
    print "Difference at key $key: ", @diff, "\n" if @diff ;
}



Единственно что не могу победить это как мне в получившихся хешах сравнить сначала значения, потом те значения которые не совпадают сравнить с ключами..
Все что нужно это список тех значений у которых явно не совпадает пара value - key.
...
Рейтинг: 0 / 0
14.11.2012, 21:45
    #38038846
nexoma
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PERL) открыть 2 файла и сравнить построчно
так вроде правильно делаете.

1a. один файл в один массив, где ключ имя файла с отсечённым путём, цифру - в значение .
второй файл также во второй хэш.
далее сравнивать перебором.

1b.
Код: php
1.
2.
$hash{file}{'1'} = значение из первого файла
$hash{file}{'2'} = значение из первого файла



и одним перебором получаем список, где
Код: php
1.
 $hash{file}{'2'} != $hash{file}{'1'}

, а также список отсутствующих и в том и в другом списках.


2. как вариант, загнать всё в базу, типа sqllite и выбрать разницу через select c помощью DBI

3. проанализировать и, возможно, поискать имеющееся решение, например, если это зеркалирование файлов с контрольной суммой на ftp - применить mirror (прим., это условно) и подогнать решение под mirror. и не придумывать новенькое.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PERL) открыть 2 файла и сравнить построчно / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]