joseph wrote: > > "Rob Dixon" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] > >>joseph wrote: >> >>>I need help with my script, this supposedly would check a workstation >>>listed in one file then see if it's not listed on other file, if it 's the >>>case then append it on an output file.Basically what i got is the same >>>unmodified list just appended on the output file. Where did i got wrong? >>>TIA. >>> >>>#!/usr/bin/perl -w >>> >>>use strict; >>>use Data::Dumper; >>> >>>open(FL1,"pclist.txt") or die "can't open pclist.txt $!"; >>>open(FL2,"smsclient.txt") or die "can't open smsclient.txt $!"; >>>open(OUTPUT,">>unlisted.txt") or die "can't open pclist.txt $!"; >>> >>>my @smsclient = <FL1>; >>>my @pclist = <FL2>; >>>my %hash = map { $_ => 1 } @pclist; >>> >>>foreach my $key (@smsclient) { >>> chomp($key); >>> unless(exists $hash{$key}){ >>> print OUTPUT $key,"\n"; >>> } >>> } >>> >>> close(FL1); >>> close(FL2); >>> close(OUTPUT); >> >>You've used the raw file records in @pclist as keys for your hash, but >>then 'chomp'ed the data in @smsclient before you look for a match. Nothing >>will compare as equal because one set has trailing "\n" characters while the >>other doesn't. > > Thank you for the effort, but still it didn't work, I tried to run the > script in winXP/fedora linux platform just to make sure, still the problem > persist. > I really don't have any clue why this didn't work while when a try a simple > predeclared array it did, could this be because of the format of my text > file? > > For sake of clarity the format of these files are like this; > > smsclient.txt > > wkspc0001 > wkspc0002 > wkspc0003 > so..on > > pclist.txt > > wkspc0001 > wkspc0002 > wkspc0005 > > the former is an exported list of SMS collection with the latter is produce > by net view > out.txt. Hoping for any feedback and suggestion, as alway > thank you very much.
Then you still have non-graphic characters in your file records. The most likely is that you have a trailing <CR><LF> at the end of the lines of one file, and chomp() will remove only the linefeed. To fix this, use s/\s+$// foreach @pclist; s/\s+$// foreach @smsclient; instead of using chomp(). If this also fails, then try removing leading whitespace as well with s/^\s+// foreach @pclist; s/^\s+// foreach @smsclient; and if it's still not working, print out the invisible contents of the string to see where they differ. An easy way is: use URI::Escape; print uri_escape($_), "\n" foreach @pclist; if you have that module installed. If it gets this far and you don't have the module then come back here for alternatives. I have known Windows utilities output their reports in UTF16 but I don't think net does this. Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>