| | |
Compare two Text File
![]() |
•
•
Join Date: May 2007
Posts: 2
Reputation:
Solved Threads: 0
Hi,
I have one perl script for comparing two text file entries. But its not working according to my expectation. Its comparing line by line, not like comparing one entry to the complete file. I like the script to be compare all the entries irrespective of line by line comparison.
$f1 = 'E:\upload\new\2.txt';
open FILE1, "$f1" or die "Could not open file \n";
$f2= 'E:\upload\new\a.txt';
open FILE2, "$f2" or die "Could not open file \n";
$outfile = 'E:\upload\new\1.txt';
my @outlines;
foreach (<FILE1>) {
$y = 0;
$outer_text = $_;
seek(FILE2,0,0);
foreach (<FILE2>) {
$inner_text = $_;
if($outer_text eq $inner_text) {
$y = 1;
print "$outer_text, Match found \n";
last;
}
}
if($y != 1) {
print "$outer_text,No Match Found \n";
push(@outlines, $outer_text);
}
}
open (OUTFILE, ">$outfile") or die "Cannot open $outfile for writing \n";
print OUTFILE @outlines;
close OUTFILE;
close FILE1;
close FILE2;
Can anybody please help me to enhace the script.
Thanks in advance
Vinod
I have one perl script for comparing two text file entries. But its not working according to my expectation. Its comparing line by line, not like comparing one entry to the complete file. I like the script to be compare all the entries irrespective of line by line comparison.
$f1 = 'E:\upload\new\2.txt';
open FILE1, "$f1" or die "Could not open file \n";
$f2= 'E:\upload\new\a.txt';
open FILE2, "$f2" or die "Could not open file \n";
$outfile = 'E:\upload\new\1.txt';
my @outlines;
foreach (<FILE1>) {
$y = 0;
$outer_text = $_;
seek(FILE2,0,0);
foreach (<FILE2>) {
$inner_text = $_;
if($outer_text eq $inner_text) {
$y = 1;
print "$outer_text, Match found \n";
last;
}
}
if($y != 1) {
print "$outer_text,No Match Found \n";
push(@outlines, $outer_text);
}
}
open (OUTFILE, ">$outfile") or die "Cannot open $outfile for writing \n";
print OUTFILE @outlines;
close OUTFILE;
close FILE1;
close FILE2;
Can anybody please help me to enhace the script.
Thanks in advance
Vinod
Last edited by srvinu; May 23rd, 2007 at 6:11 am.
Please use [code][/code] tags when posting code.
http://www.daniweb.com/techtalkforum...ment112-3.html
If you're trying to determine which lines are common to both files, then perhaps an easier approach would be to look at the Unix ulilities
- sort
- diff
- comm
http://www.daniweb.com/techtalkforum...ment112-3.html
If you're trying to determine which lines are common to both files, then perhaps an easier approach would be to look at the Unix ulilities
- sort
- diff
- comm
Use a hash to compare the lines.
There are also some perl modules that will compare files, or you can use the operating system commands Salem mentions.
Perl Syntax (Toggle Plain Text)
use strict; use warnings; my $f1 = 'E:\upload\new\2.txt'; my $f2 = 'E:\upload\new\a.txt'; my $outfile = 'E:\upload\new\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;
There are also some perl modules that will compare files, or you can use the operating system commands Salem mentions.
•
•
Join Date: May 2007
Posts: 2
Reputation:
Solved Threads: 0
•
•
•
•
Please use tags when posting code.
http://www.daniweb.com/techtalkforum...ment112-3.html
If you're trying to determine which lines are common to both files, then perhaps an easier approach would be to look at the Unix ulilities
- sort
- diff
- comm
Example.
File A------------------------File B
uid=1------------------------uid=4
uid=2------------------------uid=3
uid=3------------------------uid=2
uid=4------------------------uid=1
uid=5
uid=6
In this case you can see file A is having all the values of file be, if we comapare file A with file B its showing "No Match". But i want the comparison like File A should match File B, as the value exist in File B. It will be good if you advice for the same.
Thanks again
Vinod
I think you should be able to pick your answer out of some combination of these commands.
Perl Syntax (Toggle Plain Text)
$ head xF* ==> xF1.txt <== uid=1 uid=2 uid=3 uid=4 uid=5 uid=6 ==> xF2.txt <== uid=4 uid=3 uid=2 uid=1 $ sort -o tmp1.txt xF1.txt && sort -o tmp2.txt xF2.txt $ diff tmp1.txt tmp2.txt 5,6d4 < uid=5 < uid=6 $ comm -12 tmp1.txt tmp2.txt # lines common to both files uid=1 uid=2 uid=3 uid=4 $ comm -13 tmp1.txt tmp2.txt # lines only in file 2 (none) $ comm -23 tmp1.txt tmp2.txt # lines only in file 1 uid=5 uid=6 $ comm -3 tmp1.txt tmp2.txt # lines unique in file 1 OR file 2 (not in both) uid=5 uid=6
![]() |
Similar Threads
- connect to text file database (Visual Basic 4 / 5 / 6)
- Searching a text file (Python)
- text file manipulations (Visual Basic 4 / 5 / 6)
- How to delete a row in text file? (Visual Basic 4 / 5 / 6)
- string: get token from string and compare token from text file (C++)
- Help with comparing user input to a text file! (C++)
- Text File Input and manipulation (C++)
- Read and write to an ASCII Text file (Java)
Other Threads in the Perl Forum
- Previous Thread: grep into one line
- Next Thread: javascript and perl
| Thread Tools | Search this Thread |






