Dstrの"YYYY年MM年DD日Z"について
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
MTA
投稿数: 16
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
"v9Plus"から"uniPaaS v1 plus"にマイグレーション中ですが、困った問題がありました。
現状1つの長めのテキスト項目にデータを編集して、テキスト印刷を行っておりますが、Dstr(日付項目,"YYYY年MM年DD日Z")の編集にて、日付が空白の場合、V9までは14個の半角スペースが戻って来たのですが、uniPaaSのだとunicode対応の為でしょうか11個になってしまいレイアウトがずれてしまいます。
上記は仕様なのでしょうか?環境が不正なのでしょうか?教えて頂ければと思います。
PG修正による対処は、簡単だと思いますが、量が多いのとこの現象を回避できる方法がありましたらと思い投稿しました。
現状1つの長めのテキスト項目にデータを編集して、テキスト印刷を行っておりますが、Dstr(日付項目,"YYYY年MM年DD日Z")の編集にて、日付が空白の場合、V9までは14個の半角スペースが戻って来たのですが、uniPaaSのだとunicode対応の為でしょうか11個になってしまいレイアウトがずれてしまいます。
上記は仕様なのでしょうか?環境が不正なのでしょうか?教えて頂ければと思います。
PG修正による対処は、簡単だと思いますが、量が多いのとこの現象を回避できる方法がありましたらと思い投稿しました。
投票数:0
平均点:0.00
Jiro123
投稿数: 271
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
日付が空白というのは、'0000/00/00'のことを指していると推察しました。
現行バージョンでは、日付型のデフォルト値は'1901/01/01'となっており、空白にすると、この日付になると思われます。
日付型のデフォルト値を'0000/00/00'にしているならば、空白にすると'0000/00/00'になります。
Dstr関数の第二パラメータは文字型になるので、「"」の箇所は「'」が適切と思います。
それで、対処法を考えてみました。
ユーザ定義関数を利用して、日付が'0000/00/00'の場合のみ、14桁の半角スペースを返すような関数を自作するというのはどうでしょう。
メインプログラムのロジックにて、関数ロジックユニットを定義します。
名前は最小限の変更で済むように、例えば「guDstr」とでもしましょうか。(「gu」はグローバルユーザ定義関数の略称とした接頭辞です)
Dstr関数に倣って、パラメータ項目を2つ定義します。第一パラメータは日付型項目、第二パラメータは文字型あるいはUnicode型で、プロジェクトで使用している日付型書式の最長を目安にサイズ(書式)を指定します。
関数の戻り値欄では、次のような式を記述します。
If(<第一パラメータの項目のシンボル><>'0000/00/00'DATE,Dstr(<第一パラメータの項目のシンボル>,<第二パラメータの項目のシンボル>,Fill(' ',14))
まず、新規のプロジェクトを作成して、上記のユーザ定義関数の動作を確認します。
メインプログラムに設定したユーザ定義関数は、グローバルユーザ定義関数となり、プロジェクト内のプログラム(タスク)のどこでも使用可能となります。
(スコープをG=グローバルにして、ユニークな公開名を設定して、他のプロジェクトにてコンポーネントとして登録すれば、他のプロジェクトでも利用することができます)
動作確認できたら、実際のプロジェクトにて、ユーザ定義関数を設定します。(先のテスト用に新規に作成したプロジェクトをコンポーネントとして利用するようにしても良いです。その際は、もちろんスコープはG=グローバルにしておくことを忘れないように)
Dstr関数を、guDstr関数に文字列置換します。
これは、Studioの編集 > 検索と置換 > テキスト置換 で置換することができます。
ユーザ定義関数の名前を、Dstrにすれば、関数の置換の作業は不要になるのですが、実際に試してみると、既存の関数名と同じ名前だと、実行時に落ちてしまったので、ひょっとすると、名前がかぶるといけないのかもしれませんね。
ご参考まで。。。
現行バージョンでは、日付型のデフォルト値は'1901/01/01'となっており、空白にすると、この日付になると思われます。
日付型のデフォルト値を'0000/00/00'にしているならば、空白にすると'0000/00/00'になります。
Dstr関数の第二パラメータは文字型になるので、「"」の箇所は「'」が適切と思います。
それで、対処法を考えてみました。
ユーザ定義関数を利用して、日付が'0000/00/00'の場合のみ、14桁の半角スペースを返すような関数を自作するというのはどうでしょう。
メインプログラムのロジックにて、関数ロジックユニットを定義します。
名前は最小限の変更で済むように、例えば「guDstr」とでもしましょうか。(「gu」はグローバルユーザ定義関数の略称とした接頭辞です)
Dstr関数に倣って、パラメータ項目を2つ定義します。第一パラメータは日付型項目、第二パラメータは文字型あるいはUnicode型で、プロジェクトで使用している日付型書式の最長を目安にサイズ(書式)を指定します。
関数の戻り値欄では、次のような式を記述します。
If(<第一パラメータの項目のシンボル><>'0000/00/00'DATE,Dstr(<第一パラメータの項目のシンボル>,<第二パラメータの項目のシンボル>,Fill(' ',14))
まず、新規のプロジェクトを作成して、上記のユーザ定義関数の動作を確認します。
メインプログラムに設定したユーザ定義関数は、グローバルユーザ定義関数となり、プロジェクト内のプログラム(タスク)のどこでも使用可能となります。
(スコープをG=グローバルにして、ユニークな公開名を設定して、他のプロジェクトにてコンポーネントとして登録すれば、他のプロジェクトでも利用することができます)
動作確認できたら、実際のプロジェクトにて、ユーザ定義関数を設定します。(先のテスト用に新規に作成したプロジェクトをコンポーネントとして利用するようにしても良いです。その際は、もちろんスコープはG=グローバルにしておくことを忘れないように)
Dstr関数を、guDstr関数に文字列置換します。
これは、Studioの編集 > 検索と置換 > テキスト置換 で置換することができます。
ユーザ定義関数の名前を、Dstrにすれば、関数の置換の作業は不要になるのですが、実際に試してみると、既存の関数名と同じ名前だと、実行時に落ちてしまったので、ひょっとすると、名前がかぶるといけないのかもしれませんね。
ご参考まで。。。
投票数:1
平均点:10.00
MTA
投稿数: 16
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
Jiro123 様
自分で関数を作成して、置き換えてしまうのは、目から鱗でした。
早速試してみます。ありがとうございました。
自分で関数を作成して、置き換えてしまうのは、目から鱗でした。
早速試してみます。ありがとうございました。
投票数:0
平均点:0.00