Mike Blezien wrote:
> Hello all,
>
> working on creating a category/sub category data file, somthing like this:
>
> Animations::Mini::3D-Miscellaneous
> Clip_Art::People-Stick_People::Business::Household-Furniture
> Icons::BMP-Computers::32x32icons-Computers
>
> the first field in each line is the main category, followed by their
> respective sub categories... and this file needs to be updated on a daily
> basices.. the problem I'm having is when adding new sub categories to a
> matching main category, is avoiding duplications of sub cateogories.
>
> Example:
> Clip_Art::People-Stick_People::Business::Household-Furniture
>
> Clip_Art is the main category, then all others on this line are it's sub
> categories of the Clip_Art main category.
>
> Now when updating the file, if the sub category being added is already in
> data record is not to add it or update the file. So if a sub category is
> passed, Business(which is already in the data record), what is the best
> way to check if the sub category exist, and the best approach to updated
> the file.
>
> this is a snip of the code we're using to add the sub categories to the
> file and it works fine, but we need to prevent duplications of sub
> categories for a matching main category.
>
> sub update_categories {
> my($maincat,$subcat) = @_;
> my $process = 0;
> my @scats = ();
> $subcat =~ s!(.*?)\.cache!$1!g;
> open(CAT,"<$categoryfile") or die $1;
> my @catdata = <CAT>;
> close(CAT);
>
> open(CAT,">$categoryfile") or die $!;
> for my $cdat (@catdata) {
> chomp $cdat;
> @scats = split(/\::/,$cdat);
> if ($scats[0] eq $maincat) {
> push(@scats,$subcat);
> }
> my $newline = join("\::",@scats) . "\n";
> print CAT $newline;
> } # close for my
> close(CAT);
> return;
>
> }
does the following do what you want:
sub update_categories{
my $data_files = shift;
my $main_cat = shift;
my $sub_cat = shift;
open(CAT,$data_files) || die $!;
while(<CAT>){
close(CAT) and return if(/$main_cat\::$sub_cat/); #-- 1.
}
close(CAT);
open(CAT,">>$data_files") || die $!;
print CAT "$main_cat\::$sub_cat\n"; #-- 2.
close(CAT);
}
1. return and do nothing if $main_cat::$sub_cat already exists in the file
2. add to the end of the data file if $main_cat::$sub_cat does not exists
david
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]