hi,
As such I am new to perl on google search I found a code for Perl script to compare two files and print differences between them and instead of prinintg I want to store the diff. in a outputfile so can sombody provide assistance upon this from where can I edit in script to store the diff in output file..
##!/usr/bin/perl
# file_compare.pl
# Purpose: compare two files and show differences
# usage: file_compare.pl filename1 filename2
use strict;
use warnings;
my $file1 =
'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\file1.txt';
my $file2 =
'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\file2.txt';
open( FILE1, "< $file1" ) or die "Can not read file $file1: $! \n";
my @file1_contents = <FILE1>; # read entire contents of file
close(FILE1);
open( FILE2, "< $file2" ) or die "Can not read file $file2: $! \n";
my @file2_contents = <FILE2>; # read entire contents of file
close(FILE2);
my $length1 = $#file1_contents; # number of lines in first file
my $length2 = $#file2_contents; # number of lines in second file
if ( $length1 > $length2 ) {
# first file contains more lines than second file
my $counter2 = 0;
foreach my $line_file1 (@file1_contents) {
chomp($line_file1);
if ( defined( $file2_contents[$counter2] ) ) {
# line exists in second file
chomp( my $line_file2 = $file2_contents[$counter2] );
if ( $line_file1 ne $line_file2 ) {
print "\nline " . ( $counter2 + 1 ) . " \n";
print "< $line_file1 \n" if ( $line_file1 ne "" );
print "--- \n";
print "> $line_file2 \n\n" if ( $line_file2 ne "" );
}
}
else {
# there is no line in second file
print "\nline " . ( $counter2 + 1 ) . " \n";
print "< $line_file1 \n" if ( $line_file1 ne "" );
print "--- \n";
print "> \n"; # this line does not exist in file2
}
$counter2++; # point to the next line in file2
}
}
else {
# second file contains more lines than first file
# or both have equal number of lines
my $counter1 = 0;
foreach my $line_file2 (@file2_contents) {
chomp($line_file2);
if ( defined( $file1_contents[$counter1] ) ) {
# line exists in first file
chomp( my $line_file1 = $file1_contents[$counter1] );
if ( $line_file1 ne $line_file2 ) {
print "\nline " . ( $counter1 + 1 ) . " \n";
print "< $line_file1 \n" if ( $line_file1 ne "" );
print "--- \n";
print "> $line_file2 \n" if ( $line_file2 ne "" );
}
}
else {
# there is no line in first file
print "\nline " . ( $counter1 + 1 ) . " \n";
print "< \n"; # this line does not exist in file1
print "--- \n";
print "> $line_file2 \n" if ( $line_file2 ne "" );
}
$counter1++; # point to next line in file1
}
}
[mod] [TABLE]
isn't suitable for [noparse]
. And correctly formatting your code increases readability a lot
---------- Post updated at 07:45 AM ---------- Previous update was at 07:16 AM ----------
Hi,
Apart from above script I found one more script which will save the diff. in output file.
Suppose a.txt file
315: posedge SYS_CLK_IR)
^^^^^^^
vx1_bit_align.v:315: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
Coding Standard
170: posedge RD_CLK_IR)
^^^^^^^
vx1_ff_dpram.v:170: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
Coding Standard
202: posedge RD_CLK_IR)
^^^^^^^
vx1_fifo_ctrl.v:202: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
Coding Standard
267: posedge PIXEL_CLK_IR)
^^^^^^^
vx1_resizer.v:267: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
and the second file is a.txt
170: posedge RD_CLK_IR)
^^^^^^^
vx1_ff_dpram.v:170: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
and the diff. of these two will be save in ouput file 1.txt is
vx1_resizer.v:267: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
315: posedge SYS_CLK_IR)
vx1_fifo_ctrl.v:202: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
vx1_bit_align.v:315: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
267: posedge PIXEL_CLK_IR)
202: posedge RD_CLK_IR)
From output file I canclude its printing the diff of these two file in a random manner not in proper sequence as such in input file.so please help me where is error in code because diff of file is printed randomly.
Hope so I cleared my Problem.
#!/usr/bin/perl -W
use strict;
use warnings;
my $f1 = 'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\2.txt';
my $f2 = 'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\a.txt';
my $outfile = 'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\1.txt';
my %results = ();
open FILE1, "$f1" or die "Could not open file: $! \n";
while(my $line = <FILE1>){ $results{$line}=1;
}
close(FILE1);
open FILE2, "$f2" or die "Could not open file: $! \n";
while(my $line =<FILE2>) {
$results{$line}++;
}
close(FILE2);
open (OUTFILE, ">$outfile") or die "Cannot open $outfile for writing \n";
foreach my $line (keys %results) { print OUTFILE $line if $results{$line} == 1;
}
close OUTFILE;
---------- Post updated at 07:46 AM ---------- Previous update was at 07:45 AM ----------
Hi,
Apart from above script I found one more script which will save the diff. in output file.
Suppose a.txt file
315: posedge SYS_CLK_IR)
^^^^^^^
vx1_bit_align.v:315: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
Coding Standard
170: posedge RD_CLK_IR)
^^^^^^^
vx1_ff_dpram.v:170: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
Coding Standard
202: posedge RD_CLK_IR)
^^^^^^^
vx1_fifo_ctrl.v:202: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
Coding Standard
267: posedge PIXEL_CLK_IR)
^^^^^^^
vx1_resizer.v:267: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
and the second file is 2.txt
170: posedge RD_CLK_IR)
^^^^^^^
vx1_ff_dpram.v:170: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
and the diff. of these two will be save in ouput file 1.txt is
vx1_resizer.v:267: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
315: posedge SYS_CLK_IR)
vx1_fifo_ctrl.v:202: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
vx1_bit_align.v:315: CLOCKS> [WARNING] B_1202: 2 clocks in this unit detected
267: posedge PIXEL_CLK_IR)
202: posedge RD_CLK_IR)
From output file I canclude its printing the diff of these two file in a random manner not in proper sequence as such in input file.so please help me where is error in code because diff of file is printed randomly.
Hope so I cleared my Problem.
#!/usr/bin/perl -W
use strict;
use warnings;
my $f1 = 'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\2.txt';
my $f2 = 'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\a.txt';
my $outfile = 'C:\Documents and Settings\dinesh.lohan\Desktop\comparing_file\1.txt';
my %results = ();
open FILE1, "$f1" or die "Could not open file: $! \n";
while(my $line = <FILE1>){ $results{$line}=1;
}
close(FILE1);
open FILE2, "$f2" or die "Could not open file: $! \n";
while(my $line =<FILE2>) {
$results{$line}++;
}
close(FILE2);
open (OUTFILE, ">$outfile") or die "Cannot open $outfile for writing \n";
foreach my $line (keys %results) { print OUTFILE $line if $results{$line} == 1;
}
close OUTFILE;