Zitat von
MagicAndre1981:
danke für deine Anregungen, ich schau mir das mal an.
Ich hab mir das auch noch mal angeschaut.
Du verwendest den cruStrSplitter ja nur um aus String wie '123.456.789.0' die Zahl 456 zu bekommen.
Das geht auch mit Copy und Pos(Ex).
- Pos bestimmt die Position eines SubStr in einem Str.
Mit i := Pos('.', BuildLabEx); steht in i die Stelle an der der 1. Punkt steht. Bei 123.456.78... ist das 4
PosEx bestimmt die Position eines SubStr in einem Str ab der x. Stelle (Offset).
Mit PosEx('.', BuildLabEx, i) bestimmst Du also wie weit der 2. Punkt nach dem 1. steht.
Bei 123.456.78 mit Offset 4 ist das 4
Copy(s,x,y) gibt Dir einen SubStr ab der x. Stelle mit der Länge y zurück.
Copy(BuildLabEx, i+1, PosEx('.', BuildLabEx, i)-1);
-> i+1 ist das 1. Zeichen nach dem 1. Punkt
-> PosEx('.', BuildLabEx, i)-1 ist die Länge des SubStr bis zum 2. Punkt. (-1 da der Punkt ja nicht im SubStr enthalten sein soll)
-> Gibt also '456' zurück
Glücklicherweise gibt Pos und PosEx eine 0 zurück wenn nichts gefunden wird.
-> Copy(s, 1, -1) gibt dann einen Leerstring zurück ''
Delphi-Quellcode:
...
// Vorschlag ohne StrSplitter Objekt
function GetRevisionFromBuildLabEx: DWORD;
var
s:
string;
i: Integer;
E: Integer;
begin
i := Pos('
.', BuildLabEx);
s := Copy(BuildLabEx, i+1, PosEx('
.', BuildLabEx, i)-1);
// PosEx ist in Unit StrUtils
Val(s, Result, E);
if E <> 0
then Result := MAXDWORD;
end;
...
Damit kannst Du dann ganz auf dieses Objekt verzichten und bist wieder
nonVCL.
Es dürfte auch etwas schneller sein als das Splitter Objekt.