背景:私はPerlでの経験がなく、今日だけ始めました。私は2つのファイルを行ごとに比較しようとしています。別の文書に記載されていた。私は一度に1ステップずつ機能を追加しているので、まだそれを得ることはまだありません。ファイル::比較の比較は常に-1を返します
エラー:2つのファイルハンドルの比較を行っていますが、File :: Compareの説明に従って、エラーである-1が発生しています。しかし、どこにエラーが発生しているのか分かりません。
コード:
use strict;
use warnings;
use File::Compare;
my $filename1 = 'test1.txt';
my $filename2 = 'test2.txt';
open(my $fh, '<:encoding(UTF-8)', $filename1)
or die "Could not open file '$filename1' $!";
open(my $fr, '<:encoding(UTF-8)', $filename2)
or die "Could not open file '$filename2' $!";
while() {
my $row1 = <$fh>;
my $row2 = <$fr>;
my $row1Num;
my $row2Num;
if ($row1 && $row2) {
chomp $row1;
chomp $row2;
$row1Num = substr($row1, 0, index($row1, ','));
$row2Num = substr($row2, 0, index($row2, ','));
while ($row1Num != $row2Num) {
if (!$row1 || !$row2) {
last;
}
if ($row1Num < $row2Num) {
#! Add row1Num to the list
print "$row1\n";
$row1 = <$fh>;
if (!$row1) {
last;
}
chomp $row1;
$row1Num = substr($row1, 0, index($row1Num, ','));
} else {
#! Add row2Num to the list
print "$row2\n";
$row2 = <$fr>;
if (!$row2){
last;
}
chomp $row2;
$row2Num = substr($row2, 0, index($row2Num, ','));
}
}
}
if ($row1 && $row2)
{
if (compare($row1,$row2) != 0)
{
#! Add row1Num to the list
my $compare = compare($row1,$row2);
my $compare2 = compare($row2,$row1);
print "Compare($row1,$row2) == $compare\n";
print "Compare($row2,$row1) == $compare2\n";
}
} elsif (!$row1 && $row2) {
#! Add row2Num to the list
chomp $row2;
print "$row2\n";
} elsif ($row1 && !$row2) {
#! Add row1Num to the list
chomp $row1;
print "$row1\n";
} else {
last;
}
}
print "done\n";
出力:
Compare(1,a,1,1) == -1
Compare(1,1,1,a) == -1
Compare(2,b,2,2) == -1
Compare(2,2,2,b) == -1
Compare(3,3,3,3) == -1
Compare(3,3,3,3) == -1
4,d
5,5
done
test1.txtという:
1,a
2,b
3,3
4,d
test2.txtという名前:
1,1
2,2
3,3
5,5
誰かが私が馬鹿になっている場所に気づくことができれば、とても感謝しています。
てみタイピング:あなたのサンプルデータから出力される
キャッシュは必要ありませんが、あなたがソートするアイテムが大量にある場合に便利です)
をソートしますあなたのコマンドラインで 'perldoc -q intersection'を実行して、それをどうやって得るかについてのいくつかのアイデアを得てください。 –File :: Compareの 'compare'は、引数として比較するファイルの名前を期待しています。単純に 'eq'演算子が必要なようです。 – ikegami