Was meinst Du mit 'effizient'? Aus ästhetischen Gesichtpunkten würde ich sagen, das 'Pos' zu mächtig ist. Du möchstest nur wissen, ob ein Text mit einem anderen Text beginnt, Pos sucht aber den ganzen String durch.
Zum Prüfen, ob S in T vorkommt, reicht es, S mit T zu vergleichen, und zwar die ersten length(S) Zeichen. Das geht mit CompareMem sehr gut.
Hier mal eine Routine, die prüft ob ein String mit einem anderen anfängt. Sie ist doppelt so schnell wie Pos.
Delphi-Quellcode:
Function Beginswith(Const sSubStr, sString: String): Boolean;
Begin
If Length(sString) = 0 Then
Result := False
Else If Length(sSubStr) > Length(sString) Then
Result := False
Else
Result := CompareMem(@sSubstr[1], @sString[1], Length(sSubStr))
End;
Gemessen habe ich den Mittelwert zwischen Pos('AAA','AAABBBBBBBB') und Pos('XXX','AAABBBBBBBB').