in reply to How to generate the .doc file for each row from a csv file

There might be modules to build a fully blown template system, but in a crude fashion you could just do this kind of thing:

use strict; use warnings; my $row = [ "input", "format", "description", "recdate", "cabinet", "f +older" ]; print <<"DOC"; [DOCUMENT] INPUT=$$row[0] FORMAT=$$row[1] DESCRIPTION=$$row[2] RECDATE=$$row[3] DELETEINPUT=NO NODE_ID=1 VOLUME_ID=1 [CBNTFLDR] CABINET=$$row[4] FOLDER=$$row[5] [USER_DEFINITIONS] Freq:Daily Application: DOC print "\n";

Of course, you would need to first open your .doc file with the correct name and add the file handle to the print statement.

Replies are listed 'Best First'.
Re^2: How to generate the .doc file for each row from a csv file
by perladdict (Chaplain) on Feb 23, 2014 at 12:05 UTC
    Hi HDB, Thanks for the inputs, based on your input i have remodified the script for generating .doc files as below
    #!/usr/bin/perl $file = "C:\\Users\\xxx\\Desktop\\reportlist.csv"; open(FH,"$file") or die"$!\n"; @arr = <FH>; $first = shift(@arr); foreach $line(@arr) { ($reportname,$reportdesc,$actfl,$format,$freq,$cabinet,$folder,$appl) += split(',',$line); #print "$reportname,$reportdesc,$actfl,$format,$freq,$cabinet,$folder, +$appl\n"; @files = "C:\\Users\\xxx\\Desktop\\$reportname.doc"; #print "@files\n"; foreach $doc(@files) { open(FH,'>'.$doc) or die"$!\n"; print FH "\[DOCUMENT\]\n"; print FH "INPUT=$reportname" ."\n"; print FH "FORMAT=$format" . "\n"; print FH "DESCRIPTION=$reportdesc" ."\n"; print FH "RECDATE= " ."\n"; print FH "DELETEINPUT=NO" ."\n"; print FH "NODE_ID=1" ."\n"; print FH "VOLUME_ID=1" ."\n"; print FH " " ."\n"; print FH "[CBNTFLDR]" ."\n"; print FH "CABINET=$cabinet" . "\n"; print FH "FOLDER=$folder" ."\n"; print FH " " ."\n"; print FH "[USER_DEFINITIONS]" ."\n"; print FH "Freq:Daily Application:$appl" ."\n"; print FH " " ."\n"; } close(FH); }
    When i run the above code it is perfectly creating the .doc files for all the csv rows.

      One comment: you have a single .doc file in for each row in your csv file, so you can assign the filename directly to $doc:

      $doc = "C:\\Users\\xxx\\Desktop\\$reportname.doc";

      without any need for a loop over @files.