【第4回】ブログ記事内の税込価格を増税後価格に自動変更する方法

当サイトではアフィリエイト広告を利用しています

【第4回】ブログ記事内の税込価格を増税後価格に自動変更する方法 ブログ
この記事は約8分で読めます。

こんにちは、オイケです。

過去ブログの消費税10%対応プロジェクトの第3回目の記事では、

  • WordPressのテキストエディタ画面のテキスト情報を使って、gawkプログラムで税込価格を変更することに決定
  • gawk 3.1.6で試行したがマルチバイトデータを扱えないことが判明
  • gawk 3.1.5でマルチバイトデータを扱えた

というところで終わりました。

第4回目の本記事では、

  • 実際にgawkプログラムを作成
  • gawkプログラムを実行し、税込価格が消費税10%税込価格に変更されることを確認

します。

過去ブログの消費税10%対応プロジェクトとは?

オイケのブログの記事内の税込価格を消費税10%増税後の税込価格に変更する環境を構築するプロジェクトのことです。

税込価格表

上図は、料理が苦手な単身者向けの宅配食や宅配弁当のおすすめ9選という記事の抜粋です。

現状、上図中のピンクで囲んだ箇所の価格は、消費税8%の税込価格になっています。

この税込価格を、消費税10%の税込価格に、手作業では無く、自動的に変更したいのです。

前回(第3回)のおさらい

ブログ記事内の税込価格を消費税10%価格に変更するイメージ図

上図は、WordPressのテキストエディタを使って税込価格を変更するイメージ図です。

前回(第3回)は、上図中の③プログラムで8%税込価格を10%税込価格に変更をgawkプログラムで行うことを決めて、gawk 3.1.5でマルチバイトデータを扱えることの確認までを終えました。

今回(第4回)は、

  1. 上図③のプログラムをgawakで作成
  2. テストデータを使ってgawk実行
  3. ブログデータを使ってgawk実行

します。

gawkプログラム作成

gawkプログラムの作成にあたっては、以下の2つのサイトで学習しました。

変数や関数についての説明が簡潔で解りやすかったです。

  1. awk入門 コマンドの使い方とスクリプトの書き方
  2. AWKのまとめ

 

# FILE NAME = value_change.awk
/[0-9]円/ {
	cline = $0
	fldcnt = split(cline,a,/円/) # 円を区切りにして、clineを配列aに分解し、円の数を返す
	newfld = "" # 出力用行の文字列を初期化
	for(i = 1; i <= fldcnt; i++) {
		fldsent = a[i]
		if(length(fldsent) == 0) {
			if(i < fldcnt) {
				newfld = newfld "円" # 円の左側に文字が無い場合の処理
			}
		} else {
			numflag = numpoint = 0
			j = length(fldsent)
			while((j > 0) && (numflag == 0)) {
				if(substr(fldsent,j,1) ~/\,|[0-9]/) {
					j--
				} else {
					numflag = 1
				}
			}
			if(numflag == 1) {
				numpoint = j + 1
			}
			if((cline !~/円$/) && (i == fldcnt)) { # 行の最終文字が数字の場合は、増税価格計算をしない
				newfld = newfld fldsent
			} else {
				if(substr(fldsent,length(fldsent)) !~/[0-9]/) {
					newfld = newfld fldsent "円" # 円の左側の文字が数字ではない場合は、増税価格計算をしない
				} else {
					japa = substr(fldsent,1,numpoint -1) # 金額の左側の文字をjapaに代入
					oldprice = substr(fldsent,numpoint)  # 金額をoldpriceに代入
					gsub(",","",oldprice)             # 金額から,を削除
					newprice = int(oldprice / 1.08 * 1.1) # 増税後価格計算
					newprice2 = sprintf("%'d",newprice)   # 増税後価格に,を入れる
					newfld = newfld japa newprice2 "円"
				}
			}
		}

	}
	print newfld
	next
}
{
print
}

上のコードが消費税8%の税込価格を消費税10%の税込価格に変更するgawkプログラムです。

なかなか、希望する動作をせず、いじくりまくっていたら1週間位掛かってしまいました。

行き当たりばったりでいじくってしまったので、自分でコードを見ても、なぜこの記述にしているのかが解らなくなりました。

gawkプログラムの処理概要

gawkプログラムのおおまかな処理概要は以下のとおりです。

  1. /[0-9]円/を含む”行”の場合、1行内の”円”を区切りにして、配列a[]に分解する。
  2. 配列a[]の”円”の左側の数字を抽出して、その数字を1.08で割って、1.1倍する。
  3. 1.1倍した数字を”行”に戻して、出力する。

テストデータでgawkプログラム実行

あいうえお何円ですか?
かきくけこ100円さしすせそ200円何円ですか?
aiueo
たちつてと999円なにぬねの888円何円ですか?
はひふへほ1,080円まみむめも999,999円何円ですか?
たちつてと1,080円なにぬねの99,999円何円ですか?

上のコードは、gawkプログラムの動作確認用テストデータ(test2.txt)です。

オイケのブログ内では、マルチバイト(全角文字)数字を使った金額を使っていませんが、gawk 3.1.5でマルチバイト数字を数字として処理できるのかを確認したくて、テストデータにマルチバイト数字を入れてみました。

gawk テストデータ実行

上図は、テストデータでのgawkプログラム実行結果です。

①→①’

100円が101円に、200円が203円に変更されており、消費税8%税込価格が消費税10%税込価格に正しく変更されています。

尚、今回のgawkプログラムでは、消費税10%の税込価格の小数点以下を切り捨てています。

②→②’

999円が999円のままで、888円が0円に変更されています。

期待値は、「999円が1,017円に変更」、「888円が904円に変更」、なのですが、期待と違う結果になってしまいました。

調査すれば、何らかの対処方法があるのかもしれませんが、先に説明したとおり、オイケのブログ内では、マルチバイト(全角文字)数字を使った金額を使っていないので、特に対処しないことにします。

③→③’

1,080が1,100円に、999,999円が1,017,517円に変更されており、消費税8%税込価格が消費税10%税込価格に正しく変更されています。

④→④’

②→②’と同様に、期待と違う結果になりましたが、オイケのブログには影響ありません。

ブログデータでgawkプログラム実行

WordPressのビジュアルエディタ

上図は、テスト用固定ページをWordPressのビジュアルエディタで表示した画面です。

ピンクで囲んだ箇所が消費税8%の税込価格です。

WordPressのテキストエディタ

上図は、テスト用ブログをWordPressのテキストエディタで表示した画面です。

Ctrl+a→Ctrl+cで全文をコピーします。

ブログ記事メモ帳

上図は、メモ帳にCtrl+vで全文を貼り付けて、old.htmlというファイル名で保存した画面です。

ピンクで囲んだ箇所が消費税8%の税込価格です。

緑で囲んだ箇所は、この後、gawkで処理すると文字化けしてしまう箇所です。

次に、パソコンのコマンドプロンプトで、

gawk -f “value_change.awk” old.html > new.html

を実行すると、new.htmlが作成されます。

gawak処理後

上図は、new.htmlをメモ帳で開いた画面です。

ピンクで囲んだ箇所が消費税10%の税込価格に変更されています。

緑で囲んだ箇所は、文字化けで「?」になっています。

Ctrl+cで全文をコピーします。

WordPressで税込価格を確認

WordPressテキストエディタ

上図は、テスト用固定ページのWrrdPressのテキストエディタでテスト用固定ページにCtrl+vで全文を貼り付けた画面です。