hi everyone,

    Thanks for all replys about my question.

 I know here are lots of  perl experts.

 it's amazing that someone can short

that long program into one line.

    I am a  perl newbie, i wonder

whether someone can  explain  what

these guys wrote(like what

Sudarshan Raghavan wrote

). I really can not understand.

    Since this group called " perl beginners",

i hope i can get some explanations.

Tanks a lot.

                             kevin

jontn_swift wrote:

>This is a classic case for my favorite one-liner:
>
>perl -e'while(<>){print unless $seen{$_}++}' <infile >outfile
>
>
>
> 
>
>On Wed, 02 Oct 2002 04:17:29 -0400, Sudarshan Raghavan 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);
>>    
>>
>
>  
>

Reply via email to