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>