Thema: Delphi DUnitX und Arrays

Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.009 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: DUnitX und Arrays

  Alt 18. Sep 2017, 10:56
Wird derzeit nicht unterstützt, kannst du aber einfach einbauen - gehe dazu in die DUnitX.Utils unit und füge diese Routine hinzu:

Delphi-Quellcode:
function ConvStr2Arr(const ASource: TValue; ATarget: PTypeInfo; out AResult: TValue): Boolean;
var
  lValue: string;
  lValues: TStringDynArray;
  lArrayData: TArrayTypeData;
  elType: PTypeInfo;
  tmp: TValue;
  i: Integer;
begin
  lValue := ASource.AsString;
  if Length(lValue) < 2 then
    Exit(False);
  if (lValue[1] <> '[') or (lValue[Length(lValue)] <> ']') then
    Exit(False);
  lValue := Copy(lValue, 2, Length(lValue) - 2);
  lValues := SplitString(lValue, ',');
  // todo: support multi dim arrays - assume one dim for now
  lArrayData := GetTypeData(ATarget).ArrayData;
  elType := lArrayData.ElType^;
  if Length(lValues) <> lArrayData.ElCount then
    Exit(False);
  TValue.Make(nil, ATarget, AResult);
  for i := 0 to lArrayData.ElCount - 1 do
  begin
    if not TValue.From(lValues[i]).TryConvert(elType, tmp) then
      Exit(False);
    AResult.SetArrayElement(i, tmp);
  end;
  Result := True;
end;
Außerdem musst du sie noch in das Conversions Array bei [tkUString,tkArray] eintragen.

P.S. Dann klappt das übrigens auch mit dem const.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (18. Sep 2017 um 11:00 Uhr)
  Mit Zitat antworten Zitat