Как разделить строку в Inno Setup
Как я могу разделить строку в Inno Setup?
Есть ли специальная функция в Inno Setup для разделения строки?
Я хочу получить следующее из строки '11.2.0.16'
:
tokens: array of string = ('11', '0', '2', '16');
спасибо заранее!
2 ответов
Я искал то же самое сегодня...
это отлично работает на сценариях настройки Inno. Вставьте этот отрывок внутри скрипта перед процедурой / функцией, которая вызовет эту процедуру "split".
вы также можете изменить это на функцию, если хотите...
procedure Explode(var Dest: TArrayOfString; Text: String; Separator: String);
var
i, p: Integer;
begin
i := 0;
repeat
SetArrayLength(Dest, i+1);
p := Pos(Separator,Text);
if p > 0 then begin
Dest[i] := Copy(Text, 1, p-1);
Text := Copy(Text, p + Length(Separator), Length(Text));
i := i + 1;
end else begin
Dest[i] := Text;
Text := '';
end;
until Length(Text)=0;
end;
procedure Whatever();
var
str: String;
strArray: TArrayOfString;
i: Integer;
begin
Explode(strArray,str,'.');
for i:=0 to GetArrayLength(strArray)-1 do begin
//do something
end;
end;
принято от здесь
для тех, кто предпочитает формат функции, я изменил выше из @cezar-lamann:
function StrSplit(Text: String; Separator: String): TArrayOfString;
var
i, p: Integer;
Dest: TArrayOfString;
begin
i := 0;
repeat
SetArrayLength(Dest, i+1);
p := Pos(Separator,Text);
if p > 0 then begin
Dest[i] := Copy(Text, 1, p-1);
Text := Copy(Text, p + Length(Separator), Length(Text));
i := i + 1;
end else begin
Dest[i] := Text;
Text := '';
end;
until Length(Text)=0;
Result := Dest
end;