我有一個這樣的字串:
;EncoderMin:250;EncoderMax:5755;MinPixel:-240;MaxPixel:980;
給定一個回傳變體型別并接受屬性型別作為引數的函式(例如 EncoderMin),我希望該函式回傳屬性的值,因此在這種情況下為 250
我正在使用此代碼,但我無法處理 2 個分隔符。第一個分隔符應該是';' 分隔每個屬性,第二個分隔符應該是“:”,將屬性與其值分開。
function TFrameLayout3DSTD.GetAttributiSTD(ALoc: Integer;
AField: String; AVarType: Word): Variant;
var
Q: TADOQuery;
LLista : TStringList;
begin
Result := null;
Q := DMConn.GetQuery(
'select AttributiSTD from Locazioni3D where idLocazione = %d', [ALoc]);
try
Q.Open;
LLista := TStringList.Create;
try
LLista.Delimiter := ';';
LLista.StrictDelimiter := True;
LLista.DelimitedText := Q.Fields[0].AsString;
Result := LLista.Values[AField];
finally
LLista.Free;
end;
finally
Q.Free;
end;
end;
其中 Q.Fields[0].AsString 等于 ;EncoderMin:250;EncoderMax:5755;MinPixel:-240;MaxPixel:980;
uj5u.com熱心網友回復:
我想通了,我必須使用,strict delimiter = true并且我的字串值應該不是用':'而是用來分隔'='。
Delphi 自動識別等號!
謝謝。
uj5u.com熱心網友回復:
另一種選擇是拆分和索引文本。
uses
System.SysUtils, System.StrUtils, System.Variants;
var
txt: string;
arr: TArray<string>;
i : integer;
v : variant;
begin
try
v := null;
txt := ';z:250;a:17;EncoderMin:250;EncoderMax:5755;MinPixel:-240;MaxPixel:980;';
arr := txt.Split([';', ':']);
i := IndexText('EncoderMin', arr);
if i >= 0 then
v := arr[succ(i)];
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315612.html
