シナリオ・ファイルにキャラクタの音声番号を挿入する

シナリオ・ファイルにキャラクタの音声番号を挿入する。
(入力ファイル1)chapter01_001.txt
アヤ「おはよう!」
まい「アヤちゃん おはよう!」
アヤ「まいちゃん今日何描く?」
まい「わたしは花かな……
アヤちゃんは?」
アヤ「アヤは……」
アヤ「あれ!?」
まい「どうし……!!」
(入力ファイル1の出力)v_chapter01_001.txt
voice( 1, 1 )
アヤ「おはよう!」
voice( 2, 1 )
まい「アヤちゃん おはよう!」
voice( 1, 2 )
アヤ「まいちゃん今日何描く?」
voice( 2, 2 )
まい「わたしは花かな……
アヤちゃんは?」
voice( 1, 3 )
アヤ「アヤは……」
voice( 1, 4 )
アヤ「あれ!?」
voice( 2, 3 )
まい「どうし……!!」
(入力ファイル2)chapter02_001.txt
まい「おはよう!」
ともき「おっス! まい」
まい「今日も髪(かみ)ボサボサ」
ともき「ボサボサかな……」
まい「ボサボサだよー
教室に着いたら整えてあげる」
ともき「べつにいいよ」
自転車(チャリン、チャリン)
あきら「ともき、まい、早くしねーと遅れるぞ」
(入力ファイル2の出力)v_chapter02_001.txt
voice( 2, 4 )
まい「おはよう!」
ともき「おっス! まい」
voice( 2, 5 )
まい「今日も髪(かみ)ボサボサ」
ともき「ボサボサかな……」
voice( 2, 6 )
まい「ボサボサだよー
教室に着いたら整えてあげる」
ともき「べつにいいよ」
自転車(チャリン、チャリン)
あきら「ともき、まい、早くしねーと遅れるぞ」
.PS1 を実行(.PS1 ファイル内に対象キャラクタ、対象シナリオ・ファイルを記しているため、.PS1 ファイル名のみを指定するだけ)
.\音声番号振り
音声番号振り.ps1
# 入力情報
$paramUser =
@{
# キャラクタ名と、そのキャラクタの番号
character =
@(
@{
charName = 'アヤ';
charNumber = 1;
};
@{
charName = 'まい';
charNumber = 2;
};
)
# シナリオ・ファイルを保存するフォルダ・パス
folder = 'D:\シナリオ'
# シナリオ・ファイル名
file =
@(
'chapter01_001.txt';
'chapter02_001.txt';
)
}
# キャラクタの音声を挿入する処理
Function PSAWK
{
Process
{
$line = $_
$paramUser.character |
%{
$char = $_
# キャラクタの台詞か確認する
if( $line -match $char.pattern )
{
# 音声数をカウントする
$char.voiceCounter ++
# 音声番号を出力する
'voice( {0}, {1} )' -f $char.charNumber, $char.voiceCounter
}
}
$line
}
}
# シナリオ・ファイルを保存するフォルダ・パスの末尾に '\' を付加する
if( $paramUser.folder.EndsWith('\') -eq $False )
{
$paramUser.folder += '\'
}
# キャラクタの台詞を特定するパターンマッチを作成
# キャラクタの音声数を初期化する
$paramUser.character |
&{
Process
{
$char = $_
# キャラクタ名に続いて次の括弧(開き)があると台詞とする
#  「,『,(
# また、キャラクタ名の前にスペースもしくはタブがあっても
# 台詞とする
$char.pattern = '^[\t ]*' + $char.charName + '[「『(]'
$char.voiceCounter = 0
}
}
# キャラクタの音声を挿入し、音声を挿入したシナリオ・ファイルを作成(出力)する
$paramUser.file |
&{
Process
{
$lines = Get-Content -LiteralPath:($paramUser.folder + $_)
$lines | PSAWK | Out-File ($paramUser.folder + 'v_' + $_) -Encoding:default
}
}
# 各キャラクタの音声数を出力する
$paramUser.character |
&{
Process
{
$char = $_
'{0} ({1}) の音声数は {2} でした。' -f $char.charName, $char.charNumber, $char.voiceCounter
}
}