Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизИсходники ф-ций из модуля System, ф-ция Pos Найти похожие ветки
← →
KSergey (2003-11-11 13:55) [0]Интересно мне: а почему все ф-ции в модуле System начинаются с подчерка? И все ли исходники там есть?
Например, заинтересовала ф-ция Pos: в system.pas вижу только ее версию для ShotrString. А для просто String? Или я что-то недопонимаю?
А вообще-то заинтересовало вот что: ф-ция Pos, но для поиска не с первой позиции строки. С одной стороны задача легко решается применением copy, однако обидно создавать копию строки, когда фактически надо лишь взять и начать в ф-ции pos искать не в 1-го (элемента, а с произвольного...). Есть ли какое-то готовое решение у кого-либо? (Все что мне попадалось - лишь использование copy для копирования части строки.) Или вс не так просто, как мне кажется?
← →
Delirium (2003-11-11 13:56) [1]PosEx
← →
KSergey (2003-11-11 14:01) [2]Это из какой версии дельфи?
← →
MBo (2003-11-11 14:04) [3]http://delphibase.endimus.com/?action=viewfunc&topic=strsearch&id=10272
← →
KSergey (2003-11-11 14:14) [4]> [3] MBo © (11.11.03 14:04)
Вот не поверите, как раз изучал ;)
Вот только пугает в ней такой финт:
AnsiStrPos(PChar(S) + fromPos - 1, PChar(SubStr))
А если на входе не AnsiString??
← →
icWasya (2003-11-11 14:35) [5]>[4]А если на входе не AnsiString??
А что - либо ShortString либо AnsiString
← →
Delirium (2003-11-11 15:34) [6]> "Это из какой версии дельфи?" - У меня 7-ка, но думаю, и в пятёрке будет работать...
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
var
I,X: Integer;
Len, LenSubStr: Integer;
begin
if Offset = 1 then
Result := Pos(SubStr, S)
else
begin
I := Offset;
LenSubStr := Length(SubStr);
Len := Length(S) - LenSubStr + 1;
while I <= Len do
begin
if S[I] = SubStr[1] then
begin
X := 1;
while (X < LenSubStr) and (S[I + X] = SubStr[X + 1]) do
Inc(X);
if (X = LenSubStr) then
begin
Result := I;
exit;
end;
end;
Inc(I);
end;
Result := 0;
end;
end;
← →
KSergey (2003-11-12 07:27) [7]> [5] icWasya © (11.11.03 14:35)
> >[4]А если на входе не AnsiString??
> А что - либо ShortString либо AnsiString
А WideString??
А по поводу модуля System так никто ничего и не скажет?
← →
MBo (2003-11-12 07:42) [8]>А по поводу модуля System так никто ничего и не скажет?
Там разные версии для каждого типа строк - _Pos, _LStrLen
← →
MBo (2003-11-12 07:44) [9]Пардон, не _LStrLen, а _LStrPos, конечно, и _WStrPos
← →
KSergey (2003-11-12 07:50) [10]Ааа, вот оно как ;)
Спасибо ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c