API version 1

- ‐

<<

オブジェクトへデータを一括代入します。

右辺のオブジェクトにより動作が変わります。

配列オブジェクト << csv定数

左辺の配列オブジェクトに対して、右辺のCSV定数をロードします。左辺にRecord配列、ListItemなどを利用することでCSVデータを使い効率的にオブジェクトを初期化できます。

ListBox初期化の例

ListBox ListBox1 {
    ListItem ListItem1[];
    ListItem1 << csv(.title, .value) {
    第1営業部,10021
    第2営業部,10022
    製造管理部,20030
    };
}

CSVデータをロード可能なオブジェクト構造

左辺に指定できる配列オブジェクトは、以下の構造をもつ必要があります。

種類

説明

1次元配列

String data[];

配列の要素数がCSVデータの行数に相当します。 列数は1列となり、data自体が列に相当します。

2次元相当の配列

Record rec[] {
    String data1;
    String data2;
}

配列の要素数がCSVデータの行数に相当します。 列数は子オブジェクトの個数となり、data1、data2が列に相当します。


CSVデータのロードにおける行方向の動作

左辺のオブジェクトが配列の要素数を明示して定義されていない場合、代入前の要素数に関わらず配列の要素数はCSVデータの行数と同じになります。

Record rec[] {
    Number SURYO;
    Number TANKA;
}
rec << csv {
1,100
2,200
2,200
1,100
};

SURYO

TANKA

[0]

1

100

[1]

2

200

[2]

2

200

[3]

1

100

左辺のオブジェクトが配列の要素数を明示して定義されている場合、CSVデータの代入では固定長の配列として扱われます。CSVデータの行数に関わらず、配列の要素数は変更されません。 要素数よりもCSVデータの行数が多い場合は、要素数を超えたCSVデータの行は切り捨てられます。CSVデータの行数が少ない場合は、後続の配列要素の値は変更されず、CSVデータのロード前の値を保持します。


配列の要素数 < CSVデータの行数の場合

Record rec[4] {
    Number SURYO;
    Number TANKA;
}
rec << csv {
1,100
2,200
2,200
1,100
3,300  ←切り捨て
4,400  ←切り捨て
};

SURYO

TANKA

[0]

1

100

[1]

2

200

[2]

2

200

[3]

1

100


配列の要素数 > CSVデータの行数の場合

Record rec[6] {
    Number SURYO;
    Number TANKA;
}
    :
rec << csv {
1,100
2,200
2,200
1,100
};

SURYO

TANKA

[0]

1

100

[1]

2

200

[2]

2

200

[3]

1

100

[4]

6

600←変化しない

[5]

7

700←変化しない

要素数が明示されている配列でも、insertメソッドやdeleteメソッドの実行により異なる件数の要素を持つことがあります。 この場合は、CSVデータのロードにより明示した要素数まで配列は拡張されますが、明示されている要素数を超えて拡張されたり、既に明示した要素数を超えている要素が削除されることはありません。

Record rec[4] {
    Number SURYO;
    Number TANKA;
}
rec[3].Delete();

rec << CSV {
1,100
2,200
2,200
1,100
3,300  ←切り捨て
};

SURYO

TANKA

[0]

1

100

[1]

2

200

[2]

2

200

[3]

1

100←拡張される

Record rec[4] {
    Number SURYO;
    Number TANKA;
}
rec.insert();
    :
rec << CSV {
1,100
2,200
2,200
1,100
};

SURYO

TANKA

[0]

1

100

[1]

2

200

[2]

2

200

[3]

1

100

[4]

6

600←削除はされない

既に明示した要素数を超える要素を持った状態でCSVデータのロードした場合は、明示した要素数は関係なく現在の要素数までCSVデータを代入します。

Record rec[4] {
    Number SURYO;
    Number TANKA;
}
rec.insert(2);

rec << csv {
1,100
2,200
2,200
1,100
3,300
4,400
};

SURYO

TANKA

[0]

1

100

[1]

2

200

[2]

2

200

[3]

1

100

[4]

3

300

[5]

4

400


CSVデータのロードにおける列方向の動作

CSVデータの列は、代入先のオブジェクトの定義順に代入されます。 CSVデータの列数よりも代入先のオブジェクトが多い場合は、CSVデータの列数を超えたオブジェクトは変化しません。 また、CSVデータの列数のほうが多い場合は、代入先のオブジェクトに対応しない列は切り捨てられます。

Record rec[4] {
    Number SURYO;
    Number TANKA;
    Number KINGAKU;
}
rec << csv {
1,100,100
2,200,400
2,200,400
1,100,100
};

SURYO

TANKA

KINGAKU

[0]

1

100

100

[1]

2

200

400

[2]

2

200

400

[3]

1

100

100


列の名前をオブジェクト名、プロパティ名として使用する

列の名前付きのCSVデータを配列オブジェクトにロードする場合は、列の名前により代入先のオブジェクトやプロパティが決定されます。CSVデータの列の並び順は意味を持ちません。 列の名前は、setColumnNameメソッドやCSV定数で設定します。


オブジェクト名として使用する例

Record rec[] {
    String SURYO;
    String TANKA;
    String KINGAKU;
}
var csvdoc = new CSVDocument;
csvdoc << csv {
100,1,100
200,2,400
300,3,900
};
csvdoc.setColumnName(0, "TANKA");
csvdoc.setColumnName(1, "SURYO");
csvdoc.setColumnName(2, "KINGAKU");
rec << csvdoc;

SURYO

TANKA

KINGAKU

[0]

1

100

100

[1]

2

200

400

[2]

3

300

900

この例では、列の名前にオブジェクト名を指定しています。その結果、各列が同名のオブジェクトに代入されます。 列の名前に一致するオブジェクトが代入先のオブジェクトツリーに見つからない場合、その列は切り捨てられ、代入結果に影響を与えません。


プロパティ名として使用する例

ListBox lbData {
    ListItem item[];
}
lbData.item << csv(item.title, item.value) {
選択肢1,値1
選択肢2,値2
選択肢3,値3
};

item.title

item.value

[0]

選択肢1

値1

[1]

選択肢2

値2

[2]

選択肢3

値3

この例では、列の名前にオブジェクト名とプロパティ名を指定しています。オブジェクト名とプロパティ名はピリオドで区切ります。 その結果、第1列がListItemクラスのttleプロパティに代入され、第2列がListItemクラスのvalueプロパティに代入されます。

注意

  • 複数のピリオドは使用できません。2つ目のピリオド以降の文字列は無視されます。

  • オブジェクト名を省略した場合(".title"、".value"のような列名)は、代入先オブジェクトのプロパティと見なされます。

  • ピリオド以降の名前が子オブジェクトの名前と一致する場合は、その子オブジェクトのデフォルトプロパティが対象になります。

代入先の子オブジェクトのプロパティに設定する例

Form form1 {
    Record rec[] {
        Number c1;
        Number c2;
        Number c3;
    }
    rec << csv(c1.value, c2.value, c3.value ) {
    100,1,100
    200,2,400
    300,3,900
    };
}

c1.value

c2.value

c3.value

[0]

100

1

100

[1]

200

2

400

[2]

300

3

900

この例では、子オブジェクトの名前とプロパティ名を指定しています。その結果、第1列がc1(Numberクラス)、第2列がc2、第3列がc3のvalueプロパティに代入されます。

オブジェクト << XmlDocumentオブジェクト

左辺のオブジェクトおよびその子オブジェククトに対して、右辺のXmlDocumentオブジェクトからプロパティ一括設定を行います。

代入操作例

TabFrame TabFrame1 {
        x = 0; y = 0; width = 300; height = 200;
        TabForm TabForm1[2] {
                Label Label1 { x = 0; y = 0; width = 100; height = 20; }
                Button Button1 { x = 0; y = 20; width = 100; height = 20; }
        }
}
TabFrame1 << xml <<-
<?xml version="1.0"?>
<object name="TabFrame1">
 <property name="value">1</property>
 <object name="TabForm1">
  <property name="title">Tab1</property>
  <object name="Label1">
   <property name="title">Label Title</property>
  </object>
 </object>
 <object name="TabForm1">
  <property name="title">Tab2</property>
  <object name="Button1">
   <property name="title">Button Title</property>
   <property name="fgColor">
     <property name="r">255</property>
     <property name="g">128</property>
     <property name="b">64</property>
   </property>
  </object>
 </object>
</object>
->>;
  • 子オブジェクトはXMLの<object>要素に対応します。オブジェクト名はname属性で指定します。

<object name="TabFrame1">
  ここにTabFrame1のプロパティおよび子オブジェクトを記述
</object>
  • 配列オブジェクトは、name属性が同じ<object>要素を繰り返します。

<object name="TabFrame1">
 <object name="TabForm1">
  ここにTabForm1[0]のプロパティおよび子オブジェクトを記述
 </object>
 <object name="TabForm1">
  ここにTabForm1[1]のプロパティおよび子オブジェクトを記述
 </object>
</object>
  • プロパティはXMLの<property>要素に対応します。プロパティ名はname属性で指定し、プロパティ値は要素内テキストで指定します。

<object name="TabForm1">
 <property name="title">Tab1</property>
 …
</object>
  • fgColor(Color型)などのオブジェクト型プロパティについては、<property>要素の下に<property>要素を作ることで、プロパティオブジェクトのプロパティ値を指定できます。

<property name="fgColor">
  <property name="r">255</property>
  <property name="g">128</property>
  <property name="b">64</property>
</property>

オブジェクト << JsonDocumentオブジェクト

左辺のオブジェクトおよびその子オブジェククトに対して、右辺のJsonDocumentオブジェクトからプロパティ一括設定を行います。

代入操作例

TabFrame TabFrame1 {
        x = 0; y = 0; width = 300; height = 200;
        TabForm TabForm1[2] {
                Label Label1 { x = 0; y = 0; width = 100; height = 20; }
                Button Button1 { x = 0; y = 20; width = 100; height = 20; }
        }
}
TabFrame1 << json <<-
{
    "value": 1,
    "TabForm1": [
        {
            "title": "Tab1",
            "Label1": {
                "value": "Label Title"
            }
        },
        {
            "title": "Tab2",
            "Button1": {
                "title": "Button Title",
                "fgColor": {
                    "r": 255,
                    "g": 128,
                    "b": 64
                }
            }
        }
    ]
}
->>;
  • オブジェクトは、キーがオブジェクト名、値がプロパティ・子オブジェクトを格納した連想配列に対応します。

"Label1": {
    ここにLabel1のプロパティを記述
},
  • 配列オブジェクトは、値の指定を配列にします。

"TabForm1": [
    {
        ここにTabForm1[0]のプロパティを記述
    },
    {
        ここにTabForm1[1]のプロパティを記述
    }
],
  • プロパティは、キーがプロパティ名、値がプロパティ値に対応します。

"title": "Label Title",
  • fgColor(Color型)などのオブジェクト型プロパティについては、値を連想配列で指定します。

"fgColor": {
    "r": 255,
    "g": 128,
    "b": 64,
}

呼出形式一覧

呼出形式

説明

<<(ref)

オブジェクトへデータを一括代入します。

戻り値一覧

戻り値

説明

代入されたオブジェクト

引数一覧

引数

説明

ref

代入するオブジェクト

例外

コード

説明

SYS-26:1

'<<'オペレータを使用できません