On 29 Oct 2007 at 8:42, Mike Tran wrote: > Hey all, > > > > I'm new with Perl and need help with this simple script. I'm still > playing around with the script below to get a feel for Perl. My script > below is incomplete and I'm doing an array within an array which is > incorrect. Please help. > > > > Here's what I want to do; I have to flat files (pipe delimited, export > from a database) that I want to parse through and assign variables for > each column. Basically, I want to parse through exclude_bases.txt and > do: if base_no in exclude_bases.txt equals to base_no in base.txt then > search in the "description" field of base.txt for the string listed in > the "keyword" field in exclude_bases.tx and replace with "new_keyword" > in exclude_bases.txt and write the out put into a new file called > "new_bases.txt". > > > > Any suggestions on how I could accomplish the above task is greatly > appreciated. Thanks all. > > > > Flat Files: > > > > base.txt: > > base_no|name|description > > 10000|test|test desc > > 10001|test2|test desc 2 > > 10002|test3|test desc 3 > > > > exclude_bases.txt: > > base_no|keyword|new_keyword| > > 10000|test desc|testdesc|0 > > 10001|test desc 2|testdesc2|0 > > 10002|test desc 3|testdesc3|1 > > > > > > > > #!/usr/bin/perl > > > > use strict; > > use warnings; > > > > my $exclude_bases = "exclude_bases.txt"; > > my $current_base = "base.txt"; > > my $output = "new_bases.txt"; > > > > my %exclude_bases; > > my $exclude_text; > > my $exbase_no; > > my $keyword; > > my $new_keyword; > > > > open(EXCLUDE,"exclude_bases.txt" )|| die("Could not open file!"); > > %exclude_bases=<EXCLUDE>; > > close(EXCLUDE); > > > > my $base_no =""; > > my $name=""; > > my $description=""; > > my $current_base=""; > > my $base_text=""; > > my %bases; > > > > open(BASE,"base.txt")|| die("Could not open file!"); > > %bases=<BASE>; > > close(BASE); > > > > #choping lines and assign variables to base.txt > > foreach $base_text (%bases) > > { > > chop($base_text); > > ($base_no,$name,$description)=split(/\|/,$base_text); > > > > #choping lines and assign variables to exclude_bases.txt > > foreach $exclude_text (%exclude_bases) > > { > > chop($exclude_text); > > ($exbase_no,$keyword,$new_keyword)=split(/\|/,$base_text); > > > > if ($exbase_no=$base_no) { > > $keyword =~ s/$keyword/$new_keyword/g;} >
Well here my effort. It should help you get closer to what your after but it's not complete. I would use hashes not arrays, you'll find them extremely useful for de-duping data I haven't run the script below, please do a perl -c first. Check out "exists" perldoc -f exists #!/usr/bin/perl use strict; # Well done use warnings; # ditto. my $exclude_bases = "exclude_bases.txt"; open(EXCLUDE,"excludes.txt" )|| die("Could not open file!"); while (<EXCLUDE>) { chomp; my @fields = split(/|/,$_); $exclude_bases{$F[0]} = 0; # $f[0] contains base_no } close(EXCLUDE); open(BASE,"base.txt")|| die("Could not open file!"); while (<BASE>) { chomp; my @fields = split(/|/,$_); if (! exists($exlude_bases{$_}) ) { print "$f[2]\n"; } } close(BASE); HTH, Dp. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/