Re: extra space with /
by Xxaxx (Monk) on Apr 03, 2001 at 11:28 UTC
|
How about changing your one regex just a tad:
my ( $name, $value ) = ( $line =~ /^\s*(.*?):(.*)$/ );
to:
my ( $name, $value ) = ( $line =~ /^\s*(.*?):\s*(.*)$/ );
This might squeeze any leading spaces from $value.
Noting seeing the data file I'm not sure this is necessary.
But from the other comments it looks like "poke" around time.
Claude
| [reply] [Watch: Dir/Any] [d/l] [select] |
|
oh my god. thank you. it worked. i didn't use it where i had the regex, but up where i was splitting the $prodtxt. :)
| [reply] [Watch: Dir/Any] |
Re: extra space with /
by alfie (Pilgrim) on Apr 03, 2001 at 10:38 UTC
|
I simply can't reproduce your problem. You haven't said what
data you have stored in $textr1 and
$textr2 - so I can just guess that the problem
lies in the content of $textr1. Unless you
don't give more information what these 2 variables
contains I'm afraid but I can't help you...
--
Alfie | [reply] [Watch: Dir/Any] [d/l] [select] |
Re: extra space with /
by malaga (Pilgrim) on Apr 03, 2001 at 10:48 UTC
|
#!c:/Perl/bin/Perl -wT
use strict;#force us to pre-declare variables
use CGI qw/:standard/;
print header;#header type is text/html
require "c:/progra~1/apache~1/apache/cgi-bin/getmenu.cgi";
& java;
my $value = "Angel";
my $lfilename = "products.pdg";
open (FILE, $lfilename) or die "Can't open file!";
my @products;
while ( <FILE> )
{
if ( /^Begin Product (.*)/i ) # We have a product starting line
{
my %hash;
$hash{ 'prodcode' } = $1; # get the product code.
$hash{ 'prodname' } = <FILE>;
$hash{ 'prodprice' } = <FILE>;
$hash{ 'prodweight' } = <FILE>;
my $trackinv = <FILE>;
$hash{ 'tracking' } = ( $trackinv =~ /(Yes|No)/i );
my $img = <FILE>;
my($img2,$img1)=split(/\|/, $img);
$hash{ 'img1'} = $img1;
my $prodtxt = <FILE>;
my ($text1,$text2)=split(/\\/, $prodtxt);
$hash{ 'txt1' } = $text1;
$hash{ 'txt2' } = $text2;
my $line = <FILE>;
last if ( $line =~ /End Product/ );
if ( $line =~ /^\s*Begin Option (.*)$/ )
{
my $name = $1;
my @option_list;
while ( <FILE> )
{
last if ( /End Option/ );
push @option_list, $_;
}
$hash{ $name } = \@option_list;
}
else
{
#if there is no option, then stick what's in front of the :
+as the hash name, the rest as it's value
my ( $name, $value ) = ( $line =~ /^\s*(.*?):(.*)$/ );
$hash{ $name } = $value;
}
push @products, \%hash;
}
}
close (FILE);
print "<HTML>";
print "<TABLE ALIGN\= CENTER>";
print "<TR>";
print "<TD>";
foreach my $ref ( @products )
{
if ($ref->{prodname} =~ ($value))
{
print "<B>";
print $ref->{prodname};
print "</B>";
print "<br>";
print "<IMG SRC\=\"$ref->{img1}\">";
print "<br>";
print $ref->{prodprice};
print "<br>";
print "<a href\=\"shopper\.exe\?preadd\=action\&\;key\=$ref
+->{prodcode}\">", "Add to Cart", "</a>";
#print $ref->{prodtext};
print "<br>";
my $textr1 = "$ref->{txt1}";
my $textr2 = "$ref->{txt2}";
my $subdir = "c:/progra~1/apache~1/apache/cgi-bin/PDG_Cart";
my $filetxt = "/$textr1/$textr2";
my $please = "$subdir$filetxt";
print "$please";
open (FILE, "$please") or die "Can't open file!";
print while <FILE>;
close FILE;
}
}
print "</TD>";
print "</TR>";
print "</TABLE>";
print "<br>";
print "<TABLE>";
| [reply] [Watch: Dir/Any] [d/l] |
|
Add the print debug line I mentioned where you print $please.
Also, the quotes in my $textr2 = "$ref->{txt2}";
are useless. In fact, why not just do my $filetxt ="/$ref->{txt1}/$ref->{txt2}";? You are also killing
yourself to quote hash indexes when you don't need to.
UPDATE: The more I look at your code, the more I'm
convinced you have a space in front of one line in your
datafile...
--
$you = new YOU;
honk() if $you->love(perl)
| [reply] [Watch: Dir/Any] [d/l] [select] |
|
First of all: Use perlfunc:chomp on your input to get rid
of the trailing newline. On the other hand, that shouldn't
be the problem you currently have.
It seems to me that you might have the space in the file you
read, with a quick lookthrough I don't see the problem in
the code (or, I might just be distracted ;). I personally
would use the following for asigning the txt1 and txt2:
my $textr1 = $ref->{'txt1'};
my $textr2 = $ref->{'txt2'};
No need to put the whole ref in quotes, and I think it's cleaner if you
put the key in quotes.
--
Alfie | [reply] [Watch: Dir/Any] [d/l] |
|
yeah, i'll keep working on it. i don't think it's the file i'm reading either, because if i just take that one slash out, there is no extra space. and if i open the file and look at it, there is no space. it's weird. but true, so i better figure it out.
| [reply] [Watch: Dir/Any] |
Re: extra space with /
by extremely (Priest) on Apr 03, 2001 at 10:33 UTC
|
| [reply] [Watch: Dir/Any] |
|
yes, the slashes are printing out correctly. the path is perfect except that little space.
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] [d/l] |