Thanks, I will give it a try!

"R. Joseph Newton" wrote:
> 
> Jan Eden wrote:
> 
> > Hi,
> >
> > [EMAIL PROTECTED] wrote:
> >
> > >I have a text file with a records like:
> > >
> > >smith, James, Dr., 115 Fourth Street, Chicago, IL, 32012, $20.00:
> > >[EMAIL PROTECTED]
> > >
> > >and another text file with placeholders like:
> > >
> > >Hello $last_name, $first_name:
> > >
> > >I want to read the first textfile and update the second one.
> > >
> > >Any ideas!
> >
> > This is a very general question. Have you already tried something? Have your read 
> > an Introduction to Perl (O'Reilly's "Learning Perl" is highly recommended)?
> >
> > Basically, what you have is a data file and a template file. You should open the 
> > data file and read the data into a hash (using pattern matching), then merge the 
> > hash and the template file (replacing your placeholders), putting out a scalar 
> > variable for each set of data.
> 
> I would do it the other way around.  I am guessing here that the OP wants to use the 
> second file as a tameplate, as you suggest also, but consider the use of a template. 
>  He probably does not want to actually update the original, but to spawn 
> personalized copies for each customer/recipient record in the data file.
> 
> Since the text of the template is the material that would be repeated each time 
> through the loop, the text is what he should slurp.  Then he can go through the 
> data-file record by record, making a personalized version from the template for each 
> one.
> 
> Of course I could be wrong--the OP might really want to modify the template itself.  
> In that case, he would first have to decide which record he would want to take the 
> values from
> 
> For the time being, though, I am assuming that he simply misstated the procdure.  If 
> he has the template in memory as a concatenated string, he can substitute in the 
> proper variables for the place holders with each record
> 
> my $template_string = get_file_contents();
> my $contact = {};
> my $count = 0;
> while (<DATA_FILE>) {
>    chomp;
>    ($contact->{'last name'}, $contact->{'first name'} ...$conatact->{'current 
> balance'}) = split /,\s+/, $_;
>    (my $inerpolated_string = $template_string) =~ s/%(.*?)%/$contact->{$1}/g;
>    open(OUT_FILE, 'boiler_plate' . ++$count . '.txt'
>    print OUT_FILE $inerpolated_string;
> }
> 
> This should work alright.  Took a few rounds to get the typos out, but the following 
> worked from the command line:
> my $template_string = 'Hello, %first name% %last name%, how are you';
> 
> my $contact = {};
> my $count = 0;
> while (<DATA>) {
>    chomp;
>    ($contact->{'last name'}, $contact->{'first name'}) = split /,\s+/, $_;
>    (my $interpolated_string = $template_string) =~ s/%(.*?)%/$contact->{$1}/g;
>    open(OUT_FILE, '>boiler_plate' . ++$count . '.txt');
>    print OUT_FILE $interpolated_string;
> }
> __DATA__
> Smith, John
> Doe, Jack
> 
> The file rendered were:
> boiler_plate1.txt
> Hello, John Smith, how are you
> boiler_plate2.txt
> Hello, Jack Doe, how are you
> 
> Joseph
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>

Reply via email to