为什么我从拉撒路得到一个不正确的数组大小?

时间:2014-11-10 14:37:14

标签: arrays lazarus fpc tstringlist

我有一个通过解析分号分隔列表创建的数组。

将字符串拆分为数组是有效的,如果我使用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;

0 个答案:

没有答案