in reply to Combining while statements

I need something similar to Combining while statements or Re: Combining while statements. The idea is to grab search results out of 2 tab delimited text files but keep the results of each file in separate scalers or maybe arrays to be printed separately later. I have HTML::Parser installed but the script utilizes:
use Fcntl qw(:DEFAULT :flock); use CGI; use CGI::Carp qw(fatalsToBrowser);
Example of tab delimited file:
20645 CJ Sports Sportswear and equipment retailer specialising +in rugby, hockey, netball and cricket. Full product details and o +rdering available online. www.cj-sports.co.uk/ 20660 Gekko Gear Selection of winter sports apparel. + www.gekkogear.com/
open (SIDX, "$data_dir/search.idx"); open (SIDX2, "$data_dir/search2.idx"); if ($file_locking ne "No"){flock (SIDX, LOCK_SH) or die "Can't set lo +ck for file: $data_dir/search.idx, $data_dir/search2.idx $!\n";} while (defined($line=<SIDX2>) and ($premiumline=<SIDX2>)) { $sline = $line, $premiumline; foreach $kwr (@skeyw, @premiumkeyw) { if (($sline =~ /$kwr/i) and ($kwr ne "")) { $toadk = "true"; } } if ($toadk eq "true") { $resultline[$icnt] = $line; $toadk = false; $icnt++; } } #if ($file_locking ne "No"){flock (CIT, LOCK_UN);} close (SIDX); close (SIDX2); }

Replies are listed 'Best First'.
Re: Assigning Flat Files to Arrays
by jeffa (Bishop) on Apr 27, 2004 at 05:45 UTC

    Why not use something like DBD::AnyData to ease your burden. I renamed your files to search1.idx and search2.idx ... it is important that you put a '1' in the first file in order to be able to "generically" loop each search file with the same code. You also need to add column headers to each of the tab delimited files like so:

    id      name    description     url
    20660   Gekko Gear   Selection of winter sports apparel.   www.gekkogear.com/
    
    Then, try this code:
    use strict; use warnings; use Data::Dumper; use DBI; my $dbh = DBI->connect('dbi:AnyData(RaiseError=>1):'); for (1,2) { $dbh->func("search$_", 'Tab', "search$_.idx", 'ad_catalog'); my $sth = $dbh->selectcol_arrayref(" SELECT url FROM search$_ WHERE description like '%Sport%' OR description like '%sport%' "); print Dumper $sth; }
    Yes, that is magic. :) Now, i merely Dumped the resulting array reference of URL's to STDOUT, you said that you need to store them in seperate arrays ... but i don't even see why you store what you are searching in two seperate files in the first place ... this should get you going though.

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)