I wanted to do this without completely loading the
page into an array and then checking for duplicates.

So I just inserted some flags into my while statement.

#!/usr/bin/perl -w
$dupli_file = <STDIN>;
chomp ($dupli_file );
$res_file = <STDIN>;
chomp ($res_file  );
open (DUPLI, "./$dupli_file") or die "Failed to open
$dupli_file:\n$!";
my @fil1;my$flag;
while (<DUPLI>) {
  #this sets an initial value so the foreach is
evaluated
  if(!$flag){push(@fil1,$_);print "first push :
$_\n";$flag++}
#allow it to push if $pushit isn't reset to 0
my$pushit = 1;
  foreach $line (@fil1){
    if($_ eq $line){$pushit =0;last;}
  }
unless($flag == 0){if($pushit){push(@fil1,$_);print
"pushed $_\n"}}
}

close(DUPLI);
print "RESULT\n";
open (RESULT, ">./$res_file") or die "Failed to open
$res_file for writing:\n $!";
print RESULT @fil1;
close (RESULT);

__END__

--- Sudarshan Raghavan <[EMAIL PROTECTED]> wrote:
> On Fri, 27 Sep 2002, waytech wrote:
> 
> > hi,
> > 
> > i want to remove duplicate lines from one
> file(original file), and save 
> > the result to another file.
> > 
> > the origianl file like this:
> > 
> >
>
--------------------------------------------------------------------------------------------
> > [EMAIL PROTECTED]
> > [EMAIL PROTECTED]
> > [EMAIL PROTECTED]
> > [EMAIL PROTECTED]
> > [EMAIL PROTECTED]
> > [EMAIL PROTECTED]
> >
>
-------------------------------------------------------------------------------------------
> > 
> > with each email address a line. I want to remove
> the duplicate 
> > lines(emais adresses) and
> > 
> > save the result to a new file.
> > 
> > I wrote a program , but it output nothing. can
> someome help ?
> > 
> > Thanks a lot.
> > 
> >                                                   
>        kevin
> > 
> >
>
-------------------------------------------------------------------------------------------
> > #!/usr/bin/perl -w
> > #######################
> > #Remove the duplicate line   #
> > #from a orginal file and save #
> > #the result to a file.             #
> > #######################
> > print "Enter the file that has duplicate
> lines.\n";
> > $Dupli_file=<stdin>;
> > chomp;
> 
> chomp by default works on $_, to chomp $Dupli_file
> you will have to say
> chomp ($Dupli_file);
> 
> > print "The file you select is '$Dupli_file'\n";
> > open (Dupli_file,"$Dupli_file");
> 
> When opening a file always check for failure like
> this
> open (Dupli_file, $Dupli_file) or die "Cannot open
> $Dupli_file: $!\n";
> $! will contain the error string. For more info on
> $! (perldoc perlvar)
> 
> > print "Please select the file you want to save the
> result to:\n";
> > $Resu_file=<stdin>;
> > chomp;
> 
> chomp ($Resu_file);
> 
> > print "The result file is $Resu_file\n";
> > open (Resu_file,">$Resu_file");
> 
> Check for failure
> 
> > while (<Dupli_file>)
> > {
> >     $orin_line=$_;
> >     while (<Resu_file>){
> 
> You are trying to read from a filehandle that has
> been  opened for 
> writing. This will throw a warning message.
> 
> This logic will not work even if you open the result
> file for both reading 
> and writing. If the result file is empty to start
> with, the execution path 
> will never go into the while loop. while
> (<Resu_file>) will fail the first 
> time, which means nothing gets written into
> Resu_file. This makes it fail 
> again the 2'nd time, 3'rd time ...
> 
> >         if("$_" eq "$orin_line")
> >         {
> >         next;
> >         }
> >         print Resu_file "$orin_line";
> >     };
> > }
> 
> A hash is more suited for your job
> #!/usr/bin/perl -w
> use strict;
> 
> chomp (my $dupli_file = <STDIN>);
> chomp (my $res_file = <STDIN>);
> 
> open (DUPLI, $dupli_file) or die "Failed to open
> $dupli_file: $!\n";
> open (RESULT, ">$res_file") or die "Failed to open
> $res_file for writing: $!\n";
> 
> my %res_hash;
> while (<DUPLI>) {
>     chomp;
>     unless ($res_hash{$_}++) {
>         print RESULT "$_\n";
>     }
> }
> close (DUPLI);
> close (RESULT);
> 
> 
> 
> 
> 
> 
> -- 
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> 


__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to