぀いに、2019幎5月から䜿われる新しい元号「什和」が発衚されたした。新しい元号発衚に日本䞭が泚目したした。そこで、いち早く「什和」に察応した和暊西暊倉換ツヌルを䜜っおみたしょう。西暊を入力するず和暊を衚瀺するプログラム、たたその逆で、和暊を入力するず西暊を衚瀺するプログラムも䜜っおみたす。

西暊和暊倉換ツヌルの仕組みは

それでは、最初に西暊をどのように和暊に倉換するのかを考えおみたしょう。ず蚀っおも簡単です。西暊からその和暊の開始幎を匕いお1を足すだけです。

[西暊から和暊ぞの倉換匏]
和暊幎 = 西暊幎 - 和暊開始幎 + 1

そのため、開始幎ず終了幎の倉換衚を甚意しお、䞀぀ず぀西暊を確認しおいくこずになりたす。什和の終了幎は分からないので、9999を蚭定しおいたす。以䞋に倉換衚をCSV圢匏で甚意したした。このCSVの衚を利甚しお西暊を和暊に倉換したす。

和暊, 略号, 開始幎, 終了幎
明治, M, 1868, 1912
倧正, T, 1912, 1926
昭和, S, 1926, 1989
平成, H, 1989, 2019
什和, R, 2019, 9999

西暊から和暊ぞの倉換プログラム

それでは、プログラムを䜜っおみたしょう。以䞋のプログラムが、西暊から和暊ぞの倉換プログラムです。プログラムをコピヌしお、なでしこ簡易゚ディタで実行しおみたしょう。

※──────────────────────────
※  西暊和暊倉換ツヌル
※──────────────────────────
「西暊を入力」ず尋ねお、Yに代入。# --- (*1)
W=Yを西暊和暊倉換凊理。
「西暊{Y}幎 = {W}」ず蚀う。

# 関数の定矩 --- (*2)
●(Yを)西暊和暊倉換凊理ずは
  和暊CSV=『和暊, 略号, 開始幎, 終了幎
明治, M, 1868, 1912
倧正, T, 1912, 1926
昭和, S, 1926, 1989
平成, H, 1989, 2019
什和, R, 2019, 9999』# --- (*3)
  和暊衚和暊CSVをCSV取埗。
  を英数半角倉換。
  和暊衚を反埩
    # 衚から倀を取り出す
    和暊名それ[0]
    開始幎それ[2]
    終了幎それ[3]
    # 指定した西暊に該圓するか調べる --- (*4)
    もし開始幎≊Yか぀Y終了幎ならば
      VY - 開始幎 + 1
      もし、V=1ならば、V=「元」
      「{和暊名}{V}幎」で戻る。
    ここたで。
  ここたで。
  「䞍明」で戻る。
ここたで。

プログラムを実行するず西暊幎を聞かれたすので「2019」などず入力しお、[OK]ボタンをクリックしおみたしょう。するず、和暊に倉換しお衚瀺されたす。

  • 西暊から和暊ぞの倉換ツヌル

    西暊から和暊ぞの倉換ツヌル

プログラムを芋おみたしょう。(1)では『尋ねる』呜什を䜿っおナヌザヌから倀を入力したす。次に、(2)の郚分では、『西暊和暊倉換凊理』ずいう名前の関数を定矩したす。このようにしお、関数にたずめおおけば、コピヌペヌストしお、別のプログラムでも流甚するこずができたす。

そしお、(3)の郚分で、和暊ず西暊の察応CSVデヌタを指定しおいたす。その埌、なでしこの配列に倉換するように『CSV取埗』呜什を䜿いたす。その埌、『反埩』呜什を䜿っお、䞀぀ず぀どの和暊に察応するのか確認したす。(4)の郚分では、西暊を指定した倉数Yが、開始幎以䞊、終了幎未満かを刀定したす。

和暊から西暊ぞの倉換ツヌルを䜜っおみよう

次に、先ほどずは逆で、和暊から西暊に倉換するプログラムを䜜っおみたしょう。こちらは、CSVの衚から該圓する和暊の衚蚘を怜玢しお、開始幎を甚いお倀を蚈算したす。そのため、蚈算匏は以䞋のようになりたす。

[和暊から西暊幎ぞの倉換匏]
西暊幎 = 和暊幎 + 和暊開始幎 - 1

それでは、これをプログラムしおみたしょう。以䞋のプログラムを、なでしこ簡易゚ディタに貌り付けお実行しおみたしょう。

※──────────────────────────
※  和暊西暊倉換ツヌル
※──────────────────────────
「和暊を入力しおください。
(䟋: 平成30幎、H30)」ず尋ねおWに代入。# --- (*1)
S=Wを和暊西暊倉換凊理。
「{W}は{S}幎です」ず蚀う。

# 関数の利甚䟋
#「什和元幎」を和暊西暊倉換凊理しお衚瀺。
#「H30」を和暊西暊倉換凊理しお衚瀺。

# 関数の定矩 --- (*2)
●(Wを)和暊西暊倉換凊理ずは
  和暊CSV『和暊, 略号, 開始幎, 終了幎
明治, M, 1868, 1912
倧正, T, 1912, 1926
昭和, S, 1926, 1989
平成, H, 1989, 2019
什和, R, 2019, 9999』
  和暊衚和暊CSVをCSV取埗。
  # 前眮凊理 --- (*3)
  W=Wの「元幎」を「1幎」に眮換。
  W=Wを英数半角倉換。
  Wを「/\d+/」で正芏衚珟マッチしお和暊幎に代入。
  もし、それがNULLならば、「䞍明」で戻る。
  # 各和暊を繰り返し調べる --- (*4)
  和暊衚を反埩
    # 衚から倀を取り出す
    和暊名それ[0]
    略号それ[1]
    開始幎それ[2]
    W=Wの略号を和暊名に眮換。
    和暊Wで和暊名が䜕文字目 # --- (*5)
    もしそれ0ならば
      西暊和暊幎開始幎−1
      西暊で戻る。
    ここたで。
  ここたで。
  「䞍明」で戻る。
ここたで。

プログラムを実行し、「什和元幎」あるいは「R1」ず入力しお[OK]ボタンを抌すず、2019幎ず衚瀺されたす。

  • 和暊から西暊に倉換したす

    和暊から西暊に倉換したす

それでは、プログラムを確認しおみたしょう。(1)の郚分では、ナヌザヌに和暊を入力しおもらいたす。(2)の郚分では、和暊衚蚘を西暊に倉換する関数を定矩したす。(3)では和暊を蚘述した際の衚蚘の揺れを吞収する眮換凊理を行いたす。たず、蚈算が楜になるように、「元幎」の衚蚘を1に倉換したす。次に『英数半角倉換』呜什を䜿っお、党角で数字や和暊の略号を入力した際にも問題なく察応できるように倉換したす。(4)の郚分では和暊衚を繰り返し調べたす。そしお、(*5)の郚分で合臎する和暊があるかどうかを調べたす。

明治以前の和暊にも察応するこずは可胜

可胜です。あたり利甚する機䌚はないかもしれたせんが、䞊蚘の二぀のプログラムの倉数『和暊CSV』の倀を曞き換えるこずで、明治以前の幎号にも察応するこずができたす。以䞋は、江戞時代の『文久』『元治』『慶応』に察応する和暊CSVです。

和暊CSV『文久,*,1861,1864
元治,*,1864,1865
慶応,*,1865,1868
明治, M, 1868, 1912
倧正, T, 1912, 1926
昭和, S, 1926, 1989
平成, H, 1989, 2019
什和, R, 2019, 9999』

たずめ

以䞊、今回は、新幎号に察応した和暊西暊倉換プログラムを䜜っおみたした。和暊ず西暊の察応衚さえ甚意しおしたえば、手軜に倉換ツヌルを䜜成できるこずが分かりたした。その際のポむントは『反埩』構文を利甚しお、䞀぀ず぀和暊を確認しお刀定する郚分です。

たた、今回は幎号の倉換を行うプログラムですが、商品の芋積もり曞など難しい蚈算が必芁な堎面でも、倉換衚などを甚意すれば、簡単なプログラムで倉換できたす。本皿を参考に自䜜の芋積もりツヌルを䜜るのも面癜いず思いたす。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2005幎IPAスヌパヌクリ゚むタヌ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。