こんにちは、オイケです。
過去ブログの消費税10%対応プロジェクトの第3回目の記事では、
- WordPressのテキストエディタ画面のテキスト情報を使って、gawkプログラムで税込価格を変更することに決定
- gawk 3.1.6で試行したがマルチバイトデータを扱えないことが判明
- gawk 3.1.5でマルチバイトデータを扱えた
というところで終わりました。
第4回目の本記事では、
- 実際にgawkプログラムを作成
-
gawkプログラムを実行し、税込価格が消費税10%税込価格に変更されることを確認
します。
過去ブログの消費税10%対応プロジェクトとは?
オイケのブログの記事内の税込価格を消費税10%増税後の税込価格に変更する環境を構築するプロジェクトのことです。
上図は、料理が苦手な単身者向けの宅配食や宅配弁当のおすすめ9選という記事の抜粋です。
現状、上図中のピンクで囲んだ箇所の価格は、消費税8%の税込価格になっています。
この税込価格を、消費税10%の税込価格に、手作業では無く、自動的に変更したいのです。
前回(第3回)のおさらい
上図は、WordPressのテキストエディタを使って税込価格を変更するイメージ図です。
前回(第3回)は、上図中の③プログラムで8%税込価格を10%税込価格に変更をgawkプログラムで行うことを決めて、gawk 3.1.5でマルチバイトデータを扱えることの確認までを終えました。
今回(第4回)は、
- 上図③のプログラムをgawakで作成
- テストデータを使ってgawk実行
- ブログデータを使ってgawk実行
します。
gawkプログラム作成
gawkプログラムの作成にあたっては、以下の2つのサイトで学習しました。
変数や関数についての説明が簡潔で解りやすかったです。
# 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プログラムのおおまかな処理概要は以下のとおりです。
- /[0-9]円/を含む”行”の場合、1行内の”円”を区切りにして、配列a[]に分解する。
- 配列a[]の”円”の左側の数字を抽出して、その数字を1.08で割って、1.1倍する。
- 1.1倍した数字を”行”に戻して、出力する。
テストデータでgawkプログラム実行
かきくけこ100円さしすせそ200円何円ですか?
aiueo
たちつてと999円なにぬねの888円何円ですか?
はひふへほ1,080円まみむめも999,999円何円ですか?
たちつてと1,080円なにぬねの99,999円何円ですか?
上のコードは、gawkプログラムの動作確認用テストデータ(test2.txt)です。
オイケのブログ内では、マルチバイト(全角文字)数字を使った金額を使っていませんが、gawk 3.1.5でマルチバイト数字を数字として処理できるのかを確認したくて、テストデータにマルチバイト数字を入れてみました。
上図は、テストデータでの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のビジュアルエディタで表示した画面です。
ピンクで囲んだ箇所が消費税8%の税込価格です。
上図は、テスト用ブログをWordPressのテキストエディタで表示した画面です。
Ctrl+a→Ctrl+cで全文をコピーします。
上図は、メモ帳にCtrl+vで全文を貼り付けて、old.htmlというファイル名で保存した画面です。
ピンクで囲んだ箇所が消費税8%の税込価格です。
緑で囲んだ箇所は、この後、gawkで処理すると文字化けしてしまう箇所です。
次に、パソコンのコマンドプロンプトで、
を実行すると、new.htmlが作成されます。
上図は、new.htmlをメモ帳で開いた画面です。
ピンクで囲んだ箇所が消費税10%の税込価格に変更されています。
緑で囲んだ箇所は、文字化けで「?」になっています。
Ctrl+cで全文をコピーします。
WordPressで税込価格を確認
上図は、テスト用固定ページのWrrdPressのテキストエディタでテスト用固定ページにCtrl+vで全文を貼り付けた画面です。
上図は、WordPressのビジュアルエディタに切り替えた画面です。
特に表示が崩れることもなく、ピンクで囲んだ箇所が消費税10%の税込価格に変更されています。
これで、ブログ記事内の消費税8%税込価格を、自動的に消費税10%税込価格に変更することができました。
一つの記事毎に、この変更作業をしなければならないのは面倒ですが、数十記事のブログであれば我慢できるレベルではないかと思います。
gawkプログラムの問題点
このgawkプログラムを使って、WordPressのブログ記事内の税込価格を消費税10%の税込価格に変更する方法には、以下の3つの問題点があります。
問題点①税抜価格も変更されてしまう
先に説明したとおり、/[0-9]円/に該当する箇所は金額を変更されてしまうので、税抜価格を表記している箇所の金額も変更されてしまいます。
これに対しては、変更されたくない箇所の金額をあらかじめ手作業で、例えば、
しておくことで、変更対象から外し、gawkでの変更処理後、メモ帳で
することで対処可能です。
問題点②文字化けする
今回の文字化け箇所は、表のセル内が空欄の場合なので、一度、ブログの各記事を見直して空欄のセルに文字を入れることで対処します。
問題点③記事単位で実行する必要がある
1つの記事毎に、コピー&ペースト→gawk実行→コピー&ペーストを実施しなければならない、というのはスマートではないですが、これが私の脳みそフル回転の実力です。
オイケのブログは、まだ50記事にも満たないので、全記事に対してgawkを実行しようと思います。
まとめ
邪道ではありますが、ブログ記事内の消費税8%税込価格を、手作業で消費税10%税込価格に変更するのではなく、自動的に変更する環境が構築できました。
今後は、SQL文を勉強して、MySQLデータベースを直接操作して、ブログ記事内の消費税8%税込価格を消費税10%税込価格に変更する環境作りに挑戦しようと思います。
10月1日までに完成する自信は全くありませんが。
では、また。
コメント