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
};
|
→ |
|
左辺のオブジェクトが配列の要素数を明示して定義されている場合、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 ←切り捨て
};
|
→ |
|
配列の要素数 > CSVデータの行数の場合
Record rec[6] {
Number SURYO;
Number TANKA;
}
:
rec << csv {
1,100
2,200
2,200
1,100
};
|
→ |
|
要素数が明示されている配列でも、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 ←切り捨て
};
|
→ |
|
Record rec[4] {
Number SURYO;
Number TANKA;
}
rec.insert();
:
rec << CSV {
1,100
2,200
2,200
1,100
};
|
→ |
|
既に明示した要素数を超える要素を持った状態で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
};
|
→ |
|
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
};
|
→ |
|
列の名前をオブジェクト名、プロパティ名として使用する
列の名前付きの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;
|
→ |
|
この例では、列の名前にオブジェクト名を指定しています。その結果、各列が同名のオブジェクトに代入されます。 列の名前に一致するオブジェクトが代入先のオブジェクトツリーに見つからない場合、その列は切り捨てられ、代入結果に影響を与えません。
プロパティ名として使用する例
ListBox lbData {
ListItem item[];
}
lbData.item << csv(item.title, item.value) {
選択肢1,値1
選択肢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
};
}
|
→ |
|
この例では、子オブジェクトの名前とプロパティ名を指定しています。その結果、第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 |
代入するオブジェクト |
例外
コード |
説明 |
---|---|
SYS-26:1 |
'<<'オペレータを使用できません |