API version 4

[ ] << CSV定数 オペレータ

iOSAndroidWindows

 

左辺の配列オブジェクトに対して、右辺の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クラスのTitleプロパティに代入され、第2列がListItemクラスのValueプロパティに代入されます。

 

注意

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

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

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

 

 

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

 

Spread Spread1 {
    SpreadRow row[] {
        SpreadColumn c1;
        SpreadColumn c2;
        SpreadColumn c3;
    }
    row << 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(SpreadColumnクラス)、第2列がc2、第3列がc3のValueプロパティに代入されます。

 

 

 



「オンラインマニュアル」一覧へ戻る
「Bizの宝箱」TOPへ戻る