#! /usr/bin/perl
use utf8;
use Encode qw/encode decode/;
use Text::CSV_XS;
######################↓↓↓テンプレート(各行)↓↓↓######################
my $innerTemplate = <<'EOS';
<div class="h-indent-1em">
<p><span class="bold">XXXfirstitemXXX</span> XXXseconditemXXX</p>
</div>
EOS
######################↑↑↑テンプレート(各行)↑↑↑######################
######################↓↓↓テンプレート(ヘッダフッタ)↓↓↓######################
my $outerTemplate = <<'EOS';
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:epub="http://www.idpf.org/2007/ops"
xml:lang="ja"
class="vrtl"
>
<head>
<meta charset="UTF-8"/>
<title>作品名</title>
<link rel="stylesheet" type="text/css" href="../style/book-style.css"/>
</head>
<body class="p-text">
<div class="main">
XXXinnerstringXXX
</div>
</body>
</html>
EOS
######################↑↑↑テンプレート(ヘッダフッタ)↑↑↑######################
######################↓↓↓メイン部分↓↓↓######################
#変換Textファイルのパスを取得
my $convertCsvFilePath = $ARGV[0];
$convertCsvFilePath = decode('UTF-8', $convertCsvFilePath);
#出力ファイルパスの定義
my $exportXhtmlFilePath = $convertCsvFilePath;
$exportXhtmlFilePath =~ s@\.csv$@\.xhtml@;
#各テキストファイルを展開、置換
open(IN,"$convertCsvFilePath");
#改行コードの統一処理
@eachLineTxts = <IN>;
$eachLineTxt = join("",@eachLineTxts);
$eachLineTxt =~ s@\x0D\x0A@\x0D@g;
$eachLineTxt =~ s@\x0A@\x0D@g;
@eachLineTxts = split("\x0D",$eachLineTxt);
$joinedTxt = join("\x0D\x0A",@eachLineTxts);
$joinedTxt = decode('UTF-8', $joinedTxt);
close (IN);
#置換処理
my $replacedTxt = & textReplace ($joinedTxt);
#出力
$replacedTxt = encode('UTF-8', $replacedTxt);
open(OUT,"> $exportXhtmlFilePath");
print OUT $replacedTxt;
close (OUT);
exit;
######################↑↑↑メイン部分↑↑↑######################
######################↓↓↓変換サブルーチン↓↓↓######################
sub textReplace {
#置換テキストの取得
$_ = $_[0];
#各行の置換処理
my @generatedLine;
my @eachlines = split(/\x0D\x0A/,$_);
foreach $eachline(@eachlines){
#Text::CSV_XSでcsvをパースして各パラメータを取り出す
my $csvRef = Text::CSV_XS->new;
$csvRef->parse($eachline);
my @eachparameters = $csvRef->fields;
my $firstItem = $eachparameters[0];
my $secondItem = $eachparameters[1];
#空欄なら処理せず、空欄でなければ各行テンプレートと合成
my $processingString = $innerTemplate;
if ($firstItem eq ""){
next;
} else {
$processingString =~ s@XXXfirstitemXXX@$firstItem@;
}
if ($secondItem eq ""){
next;
} else {
$processingString =~ s@XXXseconditemXXX@$secondItem@;
}
push (@generatedLine,$processingString);
}
#各行を結合
$innerString = join("<p><br /></p>\x0D\x0A",@generatedLine);
#ヘッダフッタ部分を合成
$_ = $outerTemplate;
$_ =~ s@XXXinnerstringXXX@$innerString@;
return $_;
}
######################↑↑↑変換サブルーチン↑↑↑######################