#!/usr/bin/perl
#
use strict;
use warnings;
require 'CSV.pm';
$ARGV[0] or die "Usage: $0 <filename> [<filename>] ...";
my ( $template_file_name, $templateText, %hash ) = '';
my $csv = Text::CSV->new( { binary => 1, eol => $/ } )
or die "Cannot use CSV: " . Text::CSV->error_diag();
for my $csvFile (@ARGV) {
print "\nProcesing file $csvFile ...\n";
open my $csvfh, '<', $csvFile or die "Unable to open $csvFile: $!"
+;
# Ignore column names in first line
my $columnNames = $csv->getline($csvfh);
# Get vars from second line
my @vars = @{ $csv->getline($csvfh) };
# Process each csv line
while ( my $row = $csv->getline($csvfh) ) {
my $templateFN = pop @$row;
if ( $template_file_name ne $templateFN ) {
$template_file_name = $templateFN;
undef $templateText;
}
# keys: fields from second line; values: fields from csv line
@hash{@vars} = @$row;
$templateText //= getTemplateText($template_file_name);
my $templateTextCopy = $templateText;
$templateTextCopy =~ s/$_/$hash{$_}/g for keys %hash;
my $ofile_name = $hash{'##rtrname##'} . '.txt';
print "Writing to file: $ofile_name\n";
open my $fh, '>', $ofile_name or die "$ofile_name: $!";
print $fh $templateTextCopy;
close $fh;
}
close $csvfh;
}
print "\nDone!\n";
sub getTemplateText {
my ($template_file_name) = @_;
local $/;
open my $fh, '<', $template_file_name or die "$template_file_name:
+ $!";
$templateText = <$fh>;
close $fh;
return $templateText;
}
This workaround saves you from installing the Text::CSV Module. |