变体Variant数组常用操作
代码
procedure TForm1.Button1Click(Sender: TObject);
var
Arr1, Arr2, Arr3: Variant;
I, J: Integer;
begin
//创建包含10个整数类型元素的变体数组
Arr1 := VarArrayCreate([0, 9], varInteger);
//创建2维数组,其中第1维是3个元素,第2维是5个元素
Arr2 := VarArrayCreate([0, 2, 0, 4], varVariant);
//创建并填充一维变体数组
Arr3 := VarArrayOf([1, 1.23, 'a', 'b', 'c']);
//判断是否是变体数组
if VarArrayDimCount(Arr1) > 0 then
Memo1.Lines.Add('是变体数组')
else
Memo1.Lines.Add('不是变体数组');
//获取变体数组的维度
Memo1.Lines.Add('Arr1维度 ' + IntToStr(VarArrayDimCount(Arr1)));
Memo1.Lines.Add('Arr2维度 ' +IntToStr(VarArrayDimCount(Arr2)));
Memo1.Lines.Add('Arr3维度 ' +IntToStr(VarArrayDimCount(Arr3)));
//修改变体数组的长度
VarArrayRedim(Arr1, 20);
Memo1.Lines.Add('Arr1 Low ' + VarArrayLowBound(Arr1, 1).ToString + ' High ' + VarArrayHighBound(Arr1, 1).ToString);
Memo1.Lines.Add('Arr2 一维 Low' + VarArrayLowBound(Arr2, 1).ToString + ' High ' + VarArrayHighBound(Arr2, 1).ToString);
Memo1.Lines.Add('Arr2 二维 Low' + VarArrayLowBound(Arr2, 2).ToString + ' High ' + VarArrayHighBound(Arr2, 2).ToString);
Memo1.Lines.Add('Arr3 Low' + VarArrayLowBound(Arr3, 1).ToString + ' High ' + VarArrayHighBound(Arr3, 1).ToString);
//修改1维数组的内容(修改第2个元素和第3个元素)
Arr1[1] := 1;
Arr1[2] := 2;
//修改多维数组的内容(修改[1,1]和[1,2]元素)
VarArrayPut(Arr2, 'a', [1, 1]);
VarArrayPut(Arr2, 'b', [1, 2]);
//遍历1维变体数组的内容
for I := VarArrayLowBound(Arr3, 1) to VarArrayHighBound(Arr3, 1) do
begin
Memo1.Lines.Add(I.ToString + '=' + VarToStr(Arr3[I]));
end;
//遍历多维变体数组的内容
for I := VarArrayLowBound(Arr2, 1) to VarArrayHighBound(Arr2, 1) do
begin
for J := VarArrayLowBound(Arr2, 2) to VarArrayHighBound(Arr2, 2) do
begin
Memo1.Lines.Add(Format('[%d,%d]=%s', [I, J, VarToStr(VarArrayGet(Arr2, [I, J]))]));
end;
end;
//清除变体数组
VarClear(Arr1);
VarClear(Arr2);
VarClear(Arr3);
end;
方法
System.Variants.VarArrayCreate
function VarArrayCreate(const Bounds: array of Integer; AVarType: TVarType): Variant;
Unit
创建变体数组。无法创建数组,则会引发 EVariantArrayCreateError
异常。
参数
Bounds 边界,必须包含偶数个值,其中每对值指定数组一个维度的上限和下限。
AVarType 元素类型。 不能包含 varArray
或 varByRef
,不能是 varString
或自定义 Variant
类型。 要创建字符串变体数组使用 varOleStr
类型。 如果元素类型为 varVariant
,则数组的元素本身就是变体,并且可以包含变体数组。
注意: 元素类型为
varByte
的变体数组是在 OLE 自动化控制器和服务器之间传递二进制数据的首选方法。 此类数组无需对其数据进行转换,并且可以使用VarArrayLock
和VarArrayUnlock
例程进行高效访问。
System.Variants.VarArrayOf
function VarArrayOf(const Values: array of Variant): Variant;
Unit
创建并填充一维变体数组。
参数
Values 转换为数组元素的 Variant
值数组。
返回数组的下限为零,上限是 0参数给出的值的数量减一,元素类型为Variant
。
System.Variants.VarArrayDimCount
function VarArrayDimCount(const A: Variant): Integer;
Unit
返回变体数组的维数。 如果给定变体不是变体数组,则返回值为零。
System.VarArrayRedim
procedure VarArrayRedim(var A: Variant; HighBound: Integer);
Unit
将最右边维度的上限更改为值 HighBound 来调整变体数组 A 的大小。
保留数组中的现有元素,并将新元素设置为零或空。 如果 A 不是数组,或者没有足够的内存来调整数组大小,则会引发 EVariantArrayCreateError
异常。
注意: 变体数组在锁定时无法调整大小。
System.Variants.VarArrayLowBound
function VarArrayLowBound(const A: Variant; Dim: Integer): Integer;
Unit
返回给定变体数组中给定维度的下限。
参数
A 变体数组。
Dim 维度,对于最左边的,参数应为 1,对于第二个最左边的维度,参数应为 2,依此类推。
如果 A 不是数组则会引发 EVariantInvalidArgError
异常,Dim 指定的维度不存在,则会引发 EVariantBadIndexError
异常。
System.Variants.VarArrayHighBound
function VarArrayHighBound(const A: Variant; Dim: Integer): Integer;
Unit
返回给定变量数组中给定维度的上限。
参数
A 变体数组。
Dim 维度,对于最左边的,参数应为 1,对于第二个最左边的维度,参数应为 2,依此类推。
如果 A 不是数组则会引发 EVariantInvalidArgError
异常,Dim 指定的维度不存在,则会引发 EVariantBadIndexError
异常。
System.Variants.VarArrayPut
procedure VarArrayPut(var A: Variant; const Value: Variant; const Indices: array of Integer);
Unit
设置多维变体数组中单个单元格的值。
参数
A 包含要设置的单元格的变体数组。
Value 要分配给指定单元格的值。
Indexs 索引值的数组。
如果 Indices 指定的值超出范围,则会引发 EVariantBadIndexError
异常。
System.Variants.VarArrayGet
function VarArrayGet(const A: Variant; const Indices: array of Integer): Variant;
Unit
获取多维变体数组中单个单元格的值。
参数
A 包含要获取的单元格的变体数组。
Indexs 索引值的数组。
如果 Indices 指定的值超出范围,则会引发 EVariantBadIndexError
异常。
System.VarClear
procedure VarClear(var V: Variant);
Unit
清空 Variant
,使其处于未分配状态。
相当于将 Unsigned
常量分配给 V 。
调用 VarClear
后,VarIsEmpty
函数返回 true,VarType
函数返回 varEmpty
。 在表达式中使用未分配的 Variant
变量会导致引发异常。 同样,如果尝试将未分配的 Variant
变量转换为另一种类型(使用 VarAsType
),则会引发异常。
标签:delphi,Variant,System,Arr2,数组,变体,Variants From: https://www.cnblogs.com/txgh/p/17899750.html注意: 未分配的
Variant
(VarClear
使其未分配 )与分配 Null 值的Variant
不同。值为Null的Variant
可以在表达式中使用,并且可以转换为其他类型的Variant
。