# データ型

マニュアル > 画面作成ガイド > スクリプト > スクリプトの構文 > # データ型 |

データ型について

SC2構文で扱える値のデータ型は下記の５種類です。

データ型 | 説明
ブール | ブール値（T or F）です。“T”はOnの状態を表し、“F”はOffの状態を表します。
数値 | 数値です。小数点も扱えます。
文字 | 文字列です。
時刻 | 時刻（日時）です。
オブジェクト | オブジェクトを変数に格納することができます。

| 上記以外の状態として、不定値（#N/A#）と空値（#NOTHING#）があります。詳細は「不定値と空値」を参照して下さい。

ブール型

T もしくは Fと記述します。TはOnの状態をあらわし、FはOffの状態を表します。TRUE もしくは　FALSEと書くこともできます（※全て大文字で記述してください）。

例）

    var a = T;
    var b = F;
    var d = a && b;		// dはFになります。
    var e = a || b;		// eはTになります。
    var f = T && F || F; 	// fはFになります。

数値型

数値です。通常の整数はもちろん倍精度浮動小数も扱えます。

例）

    var a = 123.45;
    var b = 23.45;
    var d = a + b;		// d は146.9になります。
    var e = 0xFF23;		// 0xを頭に付けると数値を16進数で表現できます

| 16進数表記で扱える値の範囲は0x00000000 ～ 0xFFFFFFFFになります。

文字型

文字です。文字は必ず、「"」で囲みます。

例）

    var a = "Hello";
    var b = a + " " + "World";	// b は"Hello World"になります。

時刻型

時刻です。時刻の表現には時刻書式を用います。時刻書式については「時刻型の書式」を参照下さい。

例）

    var a = #2005/1/2 3:4:5#;	//2005年1月2日3時4分5秒
    var a = #2005/1/2 3:4:5.123#;	//2005年1月2日3時4分5秒123ms
    var a = #now#;			//現在の時刻
    var a = #now - 1D#;		//現在の時刻から１日前（２４時間前）の時刻

オブジェクト型

オブジェクトを変数に格納することができます。

例）

    var a = this;			//自分自身のオブジェクトを代入する
    a.FillColor = "#FF0000";	//自分自身の背景を赤にする
    a = parent;			//親オブジェクトを代入する
    a.FillColor = "#00FF00";	//親の背景を緑にする

時刻型の書式

時刻型のデータでは、直接的な時刻指定のほか、例えば今現在から１０分後などといった相対時刻を求めることができます。また、コントロールの中には時刻型のプロパティを持つものがあり、それらに対してスクリプトからアクセスする場合には、時刻型の変数によって行います。

絶対時刻による指定

絶対時刻で時刻表現する場合のフォーマットは下記のとおりです。

#yyyy/mm/dd H:M:S#

例）

#2005/1/2 3:4:5#

msまで含めたい場合は下記の書式になります。

#yyyy/mm/dd H:M:S.ms#

例）

#2005/1/2 3:4:5.123#

相対時刻による指定

時刻型では相対時刻表現も可能です。相対時刻とは、現在の日時を基準として1日後の日時、などの様に指定する方法です。

相対時刻で時刻表現する場合のフォーマットは下記のとおりです。

基準時刻[+時間間隔] [-時間間隔]…

フォーマットの基準時刻の部分には下記の基準時刻が指定できます。

基準時刻 | 説明 | 現在が「2016/06/15 12:12:12」（水曜）とすると
now | 現在。 | 2016/06/15 12:12:12
year | 今年。 | 2016/01/01 00:00:00
month | 今月。 | 2016/06/01 00:00:00
week | 今週。 | 2016/06/12 00:00:00
day | 今日。 | 2016/06/15 00:00:00
hour | 今の時刻（時まで有効）。 | 2016/06/15 12:00:00
minute | 今の時刻（分まで有効）。 | 2016/06/15 12:12:00
future | 未来。 | はるか未来の時刻。
past | 過去。 | はるか過去の時刻。

時間間隔の前には「+」か「-」及び数値を必ず指定します。「+」であれば未来へ、「-」であれば過去になります。例えば「+10m」であれば基準時刻から10分後を指します。

時間間隔 | 説明
y | 年
mo | 月
d | 日
w | 週
h | 時
m | 分
s | 秒

例）現在が「2016/01/13 12:12:12」（水曜）の場合

#now# | 現在。つまり「2016/01/13 12:12:12」。
#now# | 現在-１日。つまり「2016/01/12 12:12:12」。
#now+1d# | 現在+１日。つまり「2016/01/14 12:12:12」。
#now+1d# | 現在-１ヶ月。つまり「2016/12/13 12:12:12」。　※下記の注意を参照
#month# | 今月。つまり「2016/01/01 00:00:00」。
#month-1d# | 先月の末日。つまり「2015/12/31 00:00:00」。
#month-1d+9h# | 先月の末日の朝９時。つまり「2015/12/31 09:00:00」。
#day-1d# | 昨日。つまり「2016/01/12 00:00:00」。
#day+8h+30m# | 今日の8時30分。つまり「2016/01/13 08:30:00」。
#week+2d# | 今週の火曜日。つまり「2016/01/12 00:00:00」。

| 現在が31日の場合、NOWに対して月の引き算を含めた相対時刻（例　#NOW-1MO#等）を使用できません。理由は、31日の1ヶ月前が30日までしかない月の場合、該当する日が存在しないためエラーが発生しますので注意してください。

| 時刻型の値で計算を行った場合下記のようになります。
    var a = #2004/1/1 0:0:0#;
    var b = #2004/1/1 0:1:0#;
    var d = b - a;           // dは60（秒）になる。
    var e = a + 10;          // eはaに10秒加算されて#2004/1/1 0:0:10#になる。

| ルートメソッド「GetRelativeTime」は、ある特定の時刻（現在の時刻ではなく、指定した時刻）を基準に相対時刻の書式を用いて、相対時刻を求めることができます。 例1）結果は「2002/10/9 10:10:10」になります。
    var a = ::GetRelativeTime(::CTime("2002/10/10 10:10:10"), "now-1d");
例2）結果は「2002/10/9 0:0:0」になります。
    var a = ::GetRelativeTime(::CTime("2002/10/10 10:10:10"), "day-1d");

型変換について

ルートメソッドには下記の変換メソッドが用意されており、スクリプトなどから呼び出す事で型変換を行うことができます。

CBool | 値をブール型に変換する。
CNum | 値を数値型に変換する。
CStr | 値を文字列に変換する。
CTime | 値を時刻型に変換する。
CNumToLocale(NL) | フォーマットに従った数値文字列を作成する。
CTimeStr (TS) | 値を時刻文字列に変換する。
CNumToHex | 値を16進数の文字列に変換する。
CNumToOct | 値を8進数の文字列に変換する。
CNumToBin | 値を2進数の文字列に変換する。
CHexToNum | 16進数の文字列を値に変換する。
COctToNum | 8進数の文字列を値に変換する。
CBinToNum | 2進数の文字列を値に変換する。

例えば下記の場合、変数cには“Data1:123 Data2:456”という文字列が代入されます。

    var a = 123;
    var b = 456;
    var c = "Data1:" + ::CStr(a) + " Data2:" + ::CStr(b);

| CNumToLocale(NL)は小数点や桁数を調整した数値文字列を生成する便利な関数です。第一引数で数値を、第二引数で小数点以下の桁数を指定します。 例）下記の例では、aには"12.00"という文字が代入されます。
    var a = ::NF(12, 2);