Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Исходники ф-ций из модуля 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.174 c
1-78887
tipman
2003-11-13 09:32
2003.11.24
О параметрах командной строки...


3-78777
GIL
2003-11-05 15:36
2003.11.24
Фильтрация


1-78888
GH@ST
2003-11-13 10:50
2003.11.24
Кто нибудь программировал MS Agent?


3-78813
Disruptor
2003-10-10 12:14
2003.11.24
Какую СУБД лучше использовать локально


11-78866
dreddd
2003-03-05 21:43
2003.11.24
про форму и UDP