Главная страница
    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.009 c
3-78810
чайник
2003-11-05 08:39
2003.11.24
Обход системной ошибки


14-79115
Knight
2003-10-30 00:32
2003.11.24
Локальный сервер под Линух...


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


3-78755
trcv
2003-11-03 16:11
2003.11.24
trigger


8-79070
JTAG
2003-07-28 13:39
2003.11.24
Преобразование текста в набор пикселов.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский