Главная страница
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.015 c
1-79040
viol-2
2003-11-13 11:39
2003.11.24
Загрузка программы


3-78775
fearless
2003-11-04 10:23
2003.11.24
документы из BLOB в MS WORD


3-78803
h010d
2003-11-05 09:51
2003.11.24
Нужен пример UDF на C Builder


14-79117
Marser
2003-11-02 10:37
2003.11.24
Предложение: модераторам и форумцам


6-79079
Xeon
2003-09-27 18:10
2003.11.24
Серверы (FTP, HTTP, IRC)