Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: finding unique items in an array, from a text file

by tomfahle (Priest)
on Jan 13, 2009 at 19:12 UTC ( #736050=note: print w/replies, xml ) Need Help??


in reply to finding unique items in an array, from a text file

A modified version of your code

#!/usr/bin/perl use strict; use warnings; my $file = "controls.txt"; # always(!!!) use the three argument form of open open (FH, "<", $file) or die "Can't open $file for read: $!"; my @lines; while (<FH>) { chomp; push (@lines, $_); } close(FH) or die "Cannot close $file: $!"; my %seen = (); my @uniq = (); foreach my $line ( @lines ) { unless ($seen{$line}) { #if we get here, we have not seen it before $seen{$line} = 1; push(@uniq, $line); } } print join(", ",@uniq) , "\n"; # see if it worked

controls.txt contains

1 1 2 3 3 3 3 3 5 5 6 6 7 7

which gives the following output:

1, 2, 3, 5, 6, 7

Hope this helps.
Thomas

Replies are listed 'Best First'.
Re^2: finding unique items in an array, from a text file
by leocharre (Priest) on Jan 13, 2009 at 19:16 UTC

    This is good but I think it may be overload overwhelming. I think what he needs is to see what's wrong with his script before we show any tricks ( i know, standard perl ).

    For example, show how his script can be made to work as close to what it is right now.

    What is probably happening is that you're getting errors about undeclared symbols, like %seen, for example.

    Also what you need to do is separate the stage where you read in the lines, and the place where you do something with them, like identify the unique ones.

    The following example may get closer to what you want, it still will have errors..

    #! C:\Perl\bin\perl.exe use strict; my $file = "controls.txt"; open (FH, "< $file") or die "Can't open $file for read: $!"; my @lines; while (<FH>) { push (@lines, $_); } my %seen = (); my @uniq = (); foreach @lines { unless ($seen{$item}) { #if we get here, we have not seen it before $seen{$item} = 1; push(@uniq, $item); } } close FH or die "Cannot close $file: $!"; print @lines; # see if it worked

    Remember, every symbol ($variable_name) must be given a scope(range of where in the code it is valid), with my. You can't just introduce a $item variable if it has not been declared and scoped. Which is what you are correctly doing with my @lines, and my $file, etc..

Re^2: finding unique items in an array, from a text file
by thomastolleson (Initiate) on Jan 13, 2009 at 19:44 UTC
    Yes! Thank you, Thomas! That's exactly what I needed. Also, I can learn from this. Thanks to all of you for your comments and support! Tom Tolleson

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://736050]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2021-10-26 18:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My first memorable Perl project was:







    Results (90 votes). Check out past polls.

    Notices?