デスクトップマスコット、「伺か」で使用できるSAORIの一種です。
西暦(グレゴリオ暦)の日付から元号を使用した日付を割り出して返します。
「伺か」「SAORI」等の用語については詳しく説明いたしませんのでご了承下さい。
SAORI自体の使い方は、使用するSHIORIなどによって異なりますので、ご自身でお調べ下さい。
ここではこのSAORIの使い方について説明いたします。
japanesegengou.dll
ファイルとgengou_lists
ディレクトリを同じフォルダに入れて使用してください。
gengou_lists
の中のファイルに記された元号情報を読み込み、元号を割り出します。
以下の引数を指定して使用します。
- Argument0: 調べたい西暦年(グレゴリオ暦)
- Argument1: 調べたい西暦月(グレゴリオ暦)
- Argument2: 調べたい西暦日(グレゴリオ暦)
- Argument3: 動作指定パラメータ(下記参照・省略可能)
- Argument4: ファイル指定パラメータ(下記参照・省略可能)
ResultにError
から始まる失敗理由が返ります。Valueには何も返りません。
主に、gengou_lists
内のファイルの書式が間違っているか、調べたい日付が異常なときに失敗します。
パターンは2つあります。
Resultは空で、Valueも空になります。
Resultにはその中での一つの元号を使用した日付が入ります。
例: 貞和6年1月1日
Value1には、あてはまった元号の一覧(,
区切り)が入ります。
例: 貞和6年1月1日,正平4年1月1日
Value2には、あてはまった元号がどのファイルに記されてあったかの情報の一覧(,
区切り)が入ります。
Value2の情報の書式は%Y-%m-%d(ファイルの範囲の開始日付)_%Y-%m-%d(ファイルの範囲の終了日付)_*(ファイル名の最初の_の次の文字)
です。
例: 1329-09-30_1394-08-10_h,1329-09-30_1394-08-10_n
Gi*
のように文字列で指定します。
一文字を1つのパラメータとして動作を指定します。
種類が重複していた場合、既定値の方が優先されます。
Gi*
と指定したときの動作が既定値です。
省略可能です。
G
(既定値): グレゴリオ暦換算で日付を出力します。実際の暦が太陰暦だった時代などで年月日の表記がずれますが、現代の日付感覚と同じように扱える利点があります。I
(対応未定): 太陰暦で日付を出力します。明治以後の日付がずれます。
i
(既定値): 半角数字で出力します。k
: 漢数字で出力します。
*
(既定値): 現在を日付指定に含んでいる元号が、その指定日付まで続いていると仮定して元号を割り出します。今日が2023-10-01で令和なら、明日2023-10-02も令和であるとします。!
: 厳密に範囲を取扱います。今日が令和であっても、明日が令和かは不明なので、範囲に含みません。
割り出しに使うファイルを指定します。指定に使うのは、ファイル名の最初の_
の次の1文字です。
_
で区切って、一つの範囲ずつ指定します。
例: 1つめの範囲のファイルが001_Aaa.txt
、2つめの範囲のファイルが002_Bbb.txt
だったとき、この二つを指定したいときはA_B
とする。
指定しなかった場合、指定されなかった範囲の全てのファイルが使用されます。
また、ファイル名の文字の代わりに*
を使っても、その範囲の全てのファイルが使用されます。
例として、同梱のgengou_list
では、2つめの範囲である南北朝時代のファイルが002_hokutyou.txt
と002_nantyou.txt
に分かれています。
このとき、北朝の元号を使用したいときは、*_h
、南朝の元号を使用したいときは*_n
と指定すると使用できます。
*
で1つめの範囲は全て指定し、_
を挟んで次の文字でどちらのファイルを使用するか指定します。
残りのファイルは全て一つずつなので、特定のファイルを指定せずとも大丈夫です。
(この場合意味は薄いですが、*_hn
と複数指定することも可能です)
(a_hn_n_a_m
と全ての範囲を指定しても問題ありません)
省略可能です。
On_Test
{
// 北朝の元号を出す
_result = FUNCTIONEX('path/to/japanesegengou.dll', 1350, 1, 1, 'Gi*', '*_h') // 貞和6年1月1日
// 南朝の元号を出す
_result = FUNCTIONEX('path/to/japanesegengou.dll', 1350, 1, 1, 'Gi*', '*_n') // 正平4年1月1日
// 南北朝どちらでもいいのでとりあえず元号を割り出す
_result = FUNCTIONEX('path/to/japanesegengou.dll', 1350, 1, 1) // 貞和6年1月1日
// 失敗だったらreturn
if STRSTR(_result, 'Error') == 0 {
return
}
// 範囲外だった場合もreturn
if STRLEN(_result) == 0 {
return
}
// 元号とそのファイル情報の一覧を作成
_gengous = valueex[0]
_spans = valueex[1]
_gengous = SPLIT(_gengous, ',')
_spans = SPLIT(_spans, ',')
_s = ''
_len = ARRAYSIZE(_gengous)
for _i = 0; i < _len; _i++ {
_s += _gengous[_i] + ':' + _spans[_i] + '\n'
}
// _sの中身
/*
貞和6年1月1日:1329-09-30_1394-08-10_h
正平4年1月1日:1329-09-30_1394-08-10_n
*/
}
@SAORI
お好きな登録名,path/to/japanesegengou.dll
*テスト
# 北朝の元号 貞和6年1月1日
$元号=(お好きな登録名,1350,1,1,Gi*,*_h)
# 南朝の元号 正平4年1月1日
$元号=(お好きな登録名,1350,1,1,Gi*,*_n)
# どちらでも可 貞和6年1月1日
$元号=(お好きな登録名,1350,1,1,Gi*,*_*)
>テスト失敗 (compare_head,(元号),Error)
>テスト範囲外 (is_empty,(元号))
$元号一覧=(S0)
$元号範囲=(S1)
gengou_lists
中のファイルを編集・追加・削除することで、独自の元号を返すことも可能です。
gengou_lists
中のファイルの書式については、gengou_lists
中のREADME.md
に記載しております。
元号が変更になったときもgengou_lists
内のファイルを編集すればdllを更新せずに情報を更新できます。
いずれも敬称略。ありがとうございます。
- winapi_rs / Peter Atashian
- Chrono / Kang Seonghoon and contributors
- (テスト実行時) encoding_rs / Henri Sivonen
MITにて配布いたします。
月波 清火 (tukinami seika)