Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
1-78961
td
2003-11-11 23:53
2003.11.24
OpenDialog


8-79057
my4ga
2003-07-28 13:03
2003.11.24
звук


3-78856
Liavik
2003-11-03 16:59
2003.11.24
Проверка


3-78832
Maloy
2003-11-02 13:13
2003.11.24
Записать Image в Базу данных.


4-79234
plyaznik
2003-09-28 02:07
2003.11.24
Как реализовать Application.ProcessMessages на WinApi?(-)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский