API version 4
iOSAndroidWindows
左辺の配列オブジェクトに対して、右辺のCSV定数をロードします。左辺にRecord配列、ListItemなどを利用することでCSVデータを使い効率的にオブジェクトを初期化できます。
ListBox初期化の例
ListBox ListBox1 {
ListItem ListItem1[];
ListItem1 << CSV(.Title, .Value) {
第1営業部,10021
第2営業部,10022
製造管理部,20030
};
}
左辺に指定できる配列オブジェクトは、以下の構造をもつ必要があります。
|
種類 |
例 |
説明 |
|---|---|---|
|
1次元配列 |
String data[];
|
配列の要素数がCSVデータの行数に相当します。 列数は1列となり、data自体が列に相当します。 |
|
2次元相当の配列 |
Record rec[] {
String data1;
String data2;
}
|
配列の要素数がCSVデータの行数に相当します。 列数は子オブジェクトの個数となり、data1、data2が列に相当します。
|
左辺のオブジェクトが配列の要素数を明示して定義されていない場合、代入前の要素数に関わらず配列の要素数は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データの列数のほうが多い場合は、代入先のオブジェクトに対応しない列は切り捨てられます。
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クラスのTitleプロパティに代入され、第2列がListItemクラスのValueプロパティに代入されます。
注意
・複数のピリオドは使用できません。2つ目のピリオド以降の文字列は無視されます。
・オブジェクト名を省略した場合(".Title"、".Value"のような列名)は、代入先オブジェクトのプロパティと見なされます。
・ピリオド以降の名前が子オブジェクトの名前と一致する場合は、その子オブジェクトのデフォルトプロパティが対象になります。