2014-05-23 5 views
6

Wie kann ich eine Zeichenkette in Inno-Setup teilen?
Gibt es eine spezielle Funktion in Inno Setup, um die Zeichenfolge zu teilen?Wie teilt man eine Zeichenkette in Inno Setup

Ich möchte '11.2.0.16' die folgenden aus der Zeichenfolge erhalten:

tokens: array of string = ('11', '0', '2', '16'); 

Vielen Dank im Voraus! Inno Setup Scripts

+1

Sie können wahrscheinlich tun, aber es könnte nützlich sein, wenn Sie erklären, warum Sie dies tun möchten; Es sieht so aus, als ob Sie versuchen, etwas mit einer Versionsnummer zu tun, und je nachdem, was Sie tun möchten, könnte es eine einfachere Methode sein. Es wird sicherlich nichts wie die von Ihnen gepostete Syntax verwenden, die mehr C/C# als InnoSetup Pascal Script ist. –

+0

Es gibt keine Möglichkeit, diese Zeichenfolge zu "teilen". Es muss analysiert werden. Aber versuchen Sie besser, das Ziel zu erklären, wie @Ken im obigen Kommentar fragt. – TLama

+0

@TLama: Nun, Sie könnten eine Funktion schreiben, die es analysiert und die "Split" -String zurückgegeben, und nennen Sie es "Split". :-) –

Antwort

8

Ich habe für die gleiche Sache heute suchen ...

Dieses funktioniert auf ganz gut. Fügen Sie diesen Auszug innerhalb Ihres Skripts vor der Prozedur/Funktion ein, die diese "Split" -Prozedur aufrufen wird.

Sie können dies auch auf eine Funktion ändern, wenn Sie es wünschen ...

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; 

Entnommen here

+0

Nur aus Neugier, ['here's'] (http://pastebin.com/STcQLfKR) knifflige Alternative, die alle Trennzeichen durch Zeilenumbrüche ersetzt und solchen Text in eine String-Liste lädt, die die Werte automatisch in Elemente aufteilt. Aber das ist nicht alles. Sie müssen die zu analysierende Teilzeichenfolge aus der ursprünglichen Zeichenfolge entfernen und schließlich die Anführungszeichen aus den Werten entfernen und diese Werte in eine gepunktete Zeichenfolge formatieren (daher mein erster Kommentar zu "split"). – TLama

5

Für alle, die die Funktion Format I vorzieht die oben von @ cezar-Lamann geändert haben :

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; 
Verwandte Themen