我有一个通过解析分号分隔列表创建的数组。
将字符串拆分为数组是有效的,如果我使用for-in并显示每个元素,我会得到正确的结果。
procedure badSizeOfDemo(arrayString: String);
var
semiColonSplitLine: TStringList;
begin
semiColonSplitLine:= TStringList.Create;
semiColonSplitLine.StrictDelimiter := true;
semiColonSplitLine.Delimiter:= ';';
semiColonSplitLine.DelimitedText:= arrayString;
showMessage('arrayString: ' + arrayString);
showMessage('size of split line: ' + IntToStr(SizeOf(semiColonSplitLine)));
end;
使用上面的代码,即使arrayString包含''
,我总是将数组的大小设置为'4'。
我错过了一些基本的东西吗?
切换到使用.Count
后再进行处理
在像这样分割数组之后,我做一个for-in
并检查在构建整数数组之前每个元素都可以转换为数字。
这基本上有效,但是当我尝试获取整数数组的大小时,我得到illegal qualifier
错误。
procedure badSizeOfDemo(arrayString: String);
var
semiColonSplitLine: TStringList;
myElement: String = '';
myIntegerArray: array of integer;
count: Integer = 0;
begin
semiColonSplitLine:= TStringList.Create;
semiColonSplitLine.StrictDelimiter := true;
semiColonSplitLine.Delimiter:= ';';
semiColonSplitLine.DelimitedText:= arrayString;
showMessage('arrayString: ' + arrayString);
showMessage('size of split line: ' + IntToStr(semiColonSplitLine.Count));
for myElement in semiColonSplitLine do
begin
Try
showMessage('field from split line: ' + myElement);
myIntegerArray[count]:=StrToInt(myElement);
except
On E : EConvertError do
ShowMessage('Invalid number encountered');
end;
count:=count+1;
end;
showMessage('myIntegerArray now has ' + myIntegerArray.Count + ' elements');
end;