Сборник аналогов php функций для pascal

Я создал эту тему, т.к. накопилось большое количество функций аналогов из пхп, они практически все полностью идентичны оригиналам, некоторые довольно сложно найти в интернете, многие написал сам, некоторые переписал с си, некоторые чуть подкорректировал.
Хочется поделиться, все таки чтобы такой труд не пропадал даром, многим думаю пригодится.
Тема будет постоянно пополняться и обновляться. Все функции оптимизированы для быстрого выполнения.
similar_text — Вычисляет степень похожести двух строк по алгоритму, описанному Oliver [1993].
http://php.net/manual/ru/function.similar-text.php
bin2hex — Преобразует бинарные данные в шестнадцатиричное представление
http://php.net/manual/ru/function.bin2hex.php
strstr — Находит первое вхождение подстроки
http://php.net/manual/ru/function.strstr.php
strspn — Возвращает длину участка в начале строки, соответствующего маске
http://php.net/manual/ru/function.strspn.php
Добавлено спустя 5 минут 5 секунд:
strcspn — Возвращает длину участка в начале строки, не соответствующего маске
http://php.net/manual/ru/function.strcspn.php
Добавлено спустя 3 минуты 22 секунды:
Функция WordText из fpc и delphi не соответствует функции из php, она немного другая, поэтому:
wordwrap — Выполняет перенос строки на данное количество символов с использованием символа разрыва строки.
http://php.net/manual/ru/function.wordwrap.php
Добавлено спустя 2 минуты 50 секунд:
strpbrk — Ищет в строке любой символ из заданного набора
http://php.net/manual/ru/function.strpbrk.php
Зависимость от: StrStr
Добавлено спустя 4 минуты 5 секунд:
base_convert — Конвертирует число между разными системами исчисления.
http://php.net/manual/ru/function.base-convert.php
Зависимость от: Math
Добавлено спустя 5 минут 52 секунды:
convert_cyr_string — Преобразует строку из одной кириллической кодировки в другую
http://php.net/manual/ru/function.conve ... string.php
Модуль CyrConvert:
Добавлено спустя 2 часа 10 минут 27 секунд:
Умный аналог Copy из php - substr. Легко может заменить кучу функций для работы со строками.
substr - возвращает подстроку строки string длиной length, начинающегося с start символа по счету.
Если start неотрицателен, возвращаемая подстрока начинается в позиции start от начала строки, считая от нуля. Например, в строке 'abcdef', в позиции 0 находится символ 'a', в позиции 2 - символ 'c', и т.д.
http://php.su/functions/?substr
Хочется поделиться, все таки чтобы такой труд не пропадал даром, многим думаю пригодится.
Тема будет постоянно пополняться и обновляться. Все функции оптимизированы для быстрого выполнения.
similar_text — Вычисляет степень похожести двух строк по алгоритму, описанному Oliver [1993].
http://php.net/manual/ru/function.similar-text.php
- Код: Выделить всё
procedure similar_str(const txt1,txt2: PAnsiChar; const len1, len2: Integer; var Pos1, Pos2, Max: Integer);
var
l: integer;
end1, end2, p, q: PAnsiChar;
begin
end1 := txt1 + len1;
end2 := txt2 + len2;
max := 0;
p := txt1;
q := txt2;
while p < end1 do
begin
Inc(p);
while q < end2 do
begin
Inc(q);
l := 0;
while (p + l < end1) and (q + l < end2) and (p[l] = q[l]) do
inc(l);
if l > max then
begin
max := l;
pos1 := p - txt1;
pos2 := q - txt2;
end;
end;
end;
end;
function similar_char(const txt1, txt2: PAnsiChar; const len1, len2: Integer): Integer;
var
pos1, pos2, max: Integer;
begin
similar_str(txt1, txt2, len1, len2, pos1, pos2, max);
Result := max;
if Result > 0 then
begin
if (Pos1 > 0) and (Pos2 > 0) then
Inc(Result, similar_char(txt1, txt2, pos1, pos2));
if (Pos1 + Max < Len1) and (Pos2 + Max < Len2) then
begin
Inc(Result, similar_char(txt1 + Pos1 + max, txt2 + Pos2 + max,
len1 - pos1 - max, len2 - pos2 - max));
end;
end;
end;
function similar_text(const txt1, txt2: AnsiString; var precent: Double): Integer;
var
len1, len2: integer;
begin
len1 := length(txt1);
len2 := length(txt2);
if len1 + len2 > 0 then begin
Result := similar_char(@txt1[1], @txt2[1], len1, len2);
precent := (Result * 200) / (len1 + len2);
end else
begin
Result := 0;
precent := 0;
end;
bin2hex — Преобразует бинарные данные в шестнадцатиричное представление
http://php.net/manual/ru/function.bin2hex.php
- Код: Выделить всё
function bin2hex(const Value: AnsiString): AnsiString;
const
hexconvtab: AnsiString = '0123456789abcdef';
var
i, j, t, len: integer;
begin
len := Length(Value);
SetLength(Result, len * 2);
j := 0;
for i := 1 to Len do
begin
inc(j);
Result[j] := hexconvtab[(ord(Value[i]) shr 4)+1];
inc(j);
Result[j] := hexconvtab[(ord(Value[i]) and 15)+1];
end;
end;
strstr — Находит первое вхождение подстроки
http://php.net/manual/ru/function.strstr.php
- Код: Выделить всё
function StrStr(const S:AnsiString; const Srch:AnsiString):AnsiString;
var
k: integer;
begin
k := Pos(Srch,S);
if k > 0 then begin
Result := s;
Delete(Result,1,k-1);
end
else Result := '';
end;
strspn — Возвращает длину участка в начале строки, соответствующего маске
http://php.net/manual/ru/function.strspn.php
- Код: Выделить всё
function StrSpn(const S: AnsiString; const Chars: AnsiString; StartIndex: Integer = 1; Len: Integer = -1): integer;
var
i,_to,l: integer;
begin
if StartIndex <= 0 then StartIndex := 1;
l := length(s);
if (len > -1) then begin
_to := StartIndex + len;
if _to > l then _to := l;
end else _to := l;
for i:=StartIndex to _to do
if Pos(S[i],Chars) = 0 then
begin
Result := i;
exit;
end;
Result := _to;
end;
Добавлено спустя 5 минут 5 секунд:
strcspn — Возвращает длину участка в начале строки, не соответствующего маске
http://php.net/manual/ru/function.strcspn.php
- Код: Выделить всё
function StrCSpn(const S: AnsiString; const Chars: AnsiString; StartIndex: Integer = 1; Len: Integer = -1): integer;
var
i,_to,l: integer;
begin
if StartIndex <= 0 then StartIndex := 1;
l := length(s);
if (len > -1) then begin
_to := StartIndex + len;
if _to > l then _to := l;
end else _to := l;
for i:=StartIndex to _to do
if Pos(S[i],Chars) > 0 then
begin
Result := i;
exit;
end;
Result := _to;
end;
Добавлено спустя 3 минуты 22 секунды:
Функция WordText из fpc и delphi не соответствует функции из php, она немного другая, поэтому:
wordwrap — Выполняет перенос строки на данное количество символов с использованием символа разрыва строки.
http://php.net/manual/ru/function.wordwrap.php
- Код: Выделить всё
function WrapText(const Line, BreakStr: Ansistring; const BreakChars: TSysCharSet;
MaxCol: Integer): string;
const
QuoteChars = ['''', '"'];
{$ifdef fpc}
function CharLength(const S: ansistring; Index: Integer): Integer;
begin
Result := 1;
assert((Index > 0) and (Index <= Length(S)));
if SysLocale.FarEast and (S[Index] in LeadBytes) then
Result := StrCharLength(PAnsiChar(S) + Index - 1);
end;
{$endif}
var
Col, Pos: Integer;
LinePos, LineLen: Integer;
BreakLen, BreakPos: Integer;
QuoteChar, CurChar: AnsiChar;
ExistingBreak: Boolean;
L: Integer;
begin
Col := 1;
Pos := 1;
LinePos := 1;
BreakPos := 0;
QuoteChar := #0;
ExistingBreak := False;
LineLen := Length(Line);
BreakLen := Length(BreakStr);
Result := '';
while Pos <= LineLen do
begin
CurChar := Line[Pos];
if CurChar in LeadBytes then
begin
L := CharLength(Line, Pos) - 1;
Inc(Pos, L);
Inc(Col, L);
end
else
begin
if CurChar in QuoteChars then
if QuoteChar = #0 then
QuoteChar := CurChar
else if CurChar = QuoteChar then
QuoteChar := #0;
if QuoteChar = #0 then
begin
if CurChar = BreakStr[1] then
begin
ExistingBreak := StrLComp(PAnsiChar(BreakStr), PAnsiChar(@Line[Pos]), BreakLen) = 0;
if ExistingBreak then
begin
Inc(Pos, BreakLen-1);
BreakPos := Pos;
end;
end;
if not ExistingBreak then
if CurChar in BreakChars then
BreakPos := Pos;
end;
end;
Inc(Pos);
Inc(Col);
if not (QuoteChar in QuoteChars) and (ExistingBreak or
((Col > MaxCol) and (BreakPos > LinePos))) then
begin
Col := 1;
//Result := Result + Copy(Line, LinePos, BreakPos - LinePos + 1);
Result := Result + Copy(Line, LinePos, BreakPos - LinePos);
if not (CurChar in QuoteChars) then
begin
while Pos <= LineLen do
begin
if Line[Pos] in BreakChars then
begin
Inc(Pos);
ExistingBreak := False;
end
else
begin
if StrLComp(pAnsiChar(@Line[Pos]), sLineBreak, Length(sLineBreak)) = 0 then
begin
Inc(Pos, Length(sLineBreak));
ExistingBreak := True;
end
else
Break;
end;
end;
end;
if (Pos <= LineLen) and not ExistingBreak then
Result := Result + BreakStr;
Inc(BreakPos);
LinePos := BreakPos;
Pos := LinePos;
ExistingBreak := False;
end;
end;
Result := Result + Copy(Line, LinePos, MaxInt);
end;
function WordWrap(const S: AnsiString; const Width: Integer = 75;
const Break: AnsiString = #13; const Cut: Boolean = false): AnsiString;
begin
if Cut then
Result := WrapText(S,Break,[' '],Width+1) // todo fix Cut Param
else
Result := WrapText(S,Break,[' '],Width+1);
end;
Добавлено спустя 2 минуты 50 секунд:
strpbrk — Ищет в строке любой символ из заданного набора
http://php.net/manual/ru/function.strpbrk.php
Зависимость от: StrStr
- Код: Выделить всё
function StrPbrk(const s1, s2: AnsiString): AnsiString;
var
i,len: integer;
begin
Result := #0;
len := length(s1);
for i := 1 to len do
if StrStr(s2,s1[i]) <> '' then
begin
Result := s1;
Delete(Result,1,i-1);
exit;
end;
end;
Добавлено спустя 4 минуты 5 секунд:
base_convert — Конвертирует число между разными системами исчисления.
http://php.net/manual/ru/function.base-convert.php
Зависимость от: Math
- Код: Выделить всё
function base_convert(NumIn: AnsiString; BaseIn: Byte; BaseOut: Byte): AnsiString;
var
i: integer;
currentCharacter: AnsiChar;
CharacterValue: Integer;
PlaceValue: Integer;
RunningTotal: Double;
Remainder: Double;
BaseOutDouble: Double;
NumInCaps: AnsiString;
s: AnsiString;
begin
if (NumIn = '') or (BaseIn < 2) or (BaseIn > 36) or (BaseOut < 1) or (BaseOut
> 36) then
begin
Result := '';
Exit;
end;
NumInCaps := UpperCase(NumIn);
PlaceValue := Length(NumInCaps);
RunningTotal := 0;
for i := 1 to Length(NumInCaps) do
begin
PlaceValue := PlaceValue - 1;
CurrentCharacter := NumInCaps[i];
CharacterValue := 0;
if (Ord(CurrentCharacter) > 64) and (Ord(CurrentCharacter) < 91) then
CharacterValue := Ord(CurrentCharacter) - 55;
if CharacterValue = 0 then
if (Ord(CurrentCharacter) < 48) or (Ord(CurrentCharacter) > 57) then
begin
Result := '';
Exit;
end
else
CharacterValue := Ord(CurrentCharacter) - 48;
if (CharacterValue < 0) or (CharacterValue > BaseIn - 1) then
begin
Result := '';
Exit;
end;
RunningTotal := RunningTotal + CharacterValue * (Power(BaseIn, PlaceValue));
end;
while RunningTotal > 0 do
begin
BaseOutDouble := BaseOut;
Remainder := RunningTotal - (int(RunningTotal / BaseOutDouble) *
BaseOutDouble);
RunningTotal := (RunningTotal - Remainder) / BaseOut;
if Remainder >= 10 then
CurrentCharacter := AnsiChar(Trunc(Remainder + 55))
else
begin
s := IntToStr(trunc(remainder));
CurrentCharacter := s[Length(s)];
end;
Result := CurrentCharacter + Result;
end;
end;
Добавлено спустя 5 минут 52 секунды:
convert_cyr_string — Преобразует строку из одной кириллической кодировки в другую
http://php.net/manual/ru/function.conve ... string.php
Модуль CyrConvert:
- Код: Выделить всё
unit CyrConvert;
{$ifdef fpc}{$mode delphi}{$endif}
{$H+}
interface
uses
SysUtils;
function convert_cyr_string(const str : AnsiString; const from, to_ : AnsiChar) : AnsiString;
implementation
const
cyr_win1251 = 0;
cyr_cp866 = 1;
cyr_iso88595 = 2;
cyr_mac = 3;
var
CYR_TABLES: Array[0..3] of Array[0..511] of AnsiChar = (
// WIN-1251
(#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,
#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,#46,
#154,#174,#190,#46,#159,#189,#46,#46,#179,#191,#180,#157,#46,#46,#156,#183,
#46,#46,#182,#166,#173,#46,#46,#158,#163,#152,#164,#155,#46,#46,#46,#167,
#225,#226,#247,#231,#228,#229,#246,#250,#233,#234,#235,#236,#237,#238,#239,#240,
#242,#243,#244,#245,#230,#232,#227,#254,#251,#253,#255,#249,#248,#252,#224,#241,
#193,#194,#215,#199,#196,#197,#214,#218,#201,#202,#203,#204,#205,#206,#207,#208,
#210,#211,#212,#213,#198,#200,#195,#222,#219,#221,#223,#217,#216,#220,#192,#209,
#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#32,#32,#184,#186,#32,#179,#191,#32,#32,#32,#32,#32,#180,#162,#32,
#32,#32,#32,#168,#170,#32,#178,#175,#32,#32,#32,#32,#32,#165,#161,#169,
#254,#224,#225,#246,#228,#229,#244,#227,#245,#232,#233,#234,#235,#236,#237,#238,
#239,#255,#240,#241,#242,#243,#230,#226,#252,#251,#231,#248,#253,#249,#247,#250,
#222,#192,#193,#214,#196,#197,#212,#195,#213,#200,#201,#202,#203,#204,#205,#206,
#207,#223,#208,#209,#210,#211,#198,#194,#220,#219,#199,#216,#221,#217,#215,#218),
// CP 866
(#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#225,#226,#247,#231,#228,#229,#246,#250,#233,#234,#235,#236,#237,#238,#239,#240,
#242,#243,#244,#245,#230,#232,#227,#254,#251,#253,#255,#249,#248,#252,#224,#241,
#193,#194,#215,#199,#196,#197,#214,#218,#201,#202,#203,#204,#205,#206,#207,#208,
#35,#35,#35,#124,#124,#124,#124,#43,#43,#124,#124,#43,#43,#43,#43,#43,
#43,#45,#45,#124,#45,#43,#124,#124,#43,#43,#45,#45,#124,#45,#43,#45,
#45,#45,#45,#43,#43,#43,#43,#43,#43,#43,#43,#35,#35,#124,#124,#35,
#210,#211,#212,#213,#198,#200,#195,#222,#219,#221,#223,#217,#216,#220,#192,#209,
#179,#163,#180,#164,#183,#167,#190,#174,#32,#149,#158,#32,#152,#159,#148,#154,
#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#205,#186,#213,#241,#243,#201,#32,#245,#187,#212,#211,#200,#190,#32,#247,#198,
#199,#204,#181,#240,#242,#185,#32,#244,#203,#207,#208,#202,#216,#32,#246,#32,
#238,#160,#161,#230,#164,#165,#228,#163,#229,#168,#169,#170,#171,#172,#173,#174,
#175,#239,#224,#225,#226,#227,#166,#162,#236,#235,#167,#232,#237,#233,#231,#234,
#158,#128,#129,#150,#132,#133,#148,#131,#149,#136,#137,#138,#139,#140,#141,#142,
#143,#159,#144,#145,#146,#147,#134,#130,#156,#155,#135,#152,#157,#153,#151,#154),
// iso88595
(#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#179,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#225,#226,#247,#231,#228,#229,#246,#250,#233,#234,#235,#236,#237,#238,#239,#240,
#242,#243,#244,#245,#230,#232,#227,#254,#251,#253,#255,#249,#248,#252,#224,#241,
#193,#194,#215,#199,#196,#197,#214,#218,#201,#202,#203,#204,#205,#206,#207,#208,
#210,#211,#212,#213,#198,#200,#195,#222,#219,#221,#223,#217,#216,#220,#192,#209,
#32,#163,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#32,#32,#241,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#32,#32,#32,#161,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,#32,
#238,#208,#209,#230,#212,#213,#228,#211,#229,#216,#217,#218,#219,#220,#221,#222,
#223,#239,#224,#225,#226,#227,#214,#210,#236,#235,#215,#232,#237,#233,#231,#234,
#206,#176,#177,#198,#180,#181,#196,#179,#197,#184,#185,#186,#187,#188,#189,#190,
#191,#207,#192,#193,#194,#195,#182,#178,#204,#203,#183,#200,#205,#201,#199,#202),
// Mac
(#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#225,#226,#247,#231,#228,#229,#246,#250,#233,#234,#235,#236,#237,#238,#239,#240,
#242,#243,#244,#245,#230,#232,#227,#254,#251,#253,#255,#249,#248,#252,#224,#241,
#160,#161,#162,#163,#164,#165,#166,#167,#168,#169,#170,#171,#172,#173,#174,#175,
#176,#177,#178,#179,#180,#181,#182,#183,#184,#185,#186,#187,#188,#189,#190,#191,
#128,#129,#130,#131,#132,#133,#134,#135,#136,#137,#138,#139,#140,#141,#142,#143,
#144,#145,#146,#147,#148,#149,#150,#151,#152,#153,#154,#155,#156,#179,#163,#209,
#193,#194,#215,#199,#196,#197,#214,#218,#201,#202,#203,#204,#205,#206,#207,#208,
#210,#211,#212,#213,#198,#200,#195,#222,#219,#221,#223,#217,#216,#220,#192,#255,
#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,
#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,
#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,
#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,
#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,
#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,
#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,
#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,
#192,#193,#194,#195,#196,#197,#198,#199,#200,#201,#202,#203,#204,#205,#206,#207,
#208,#209,#210,#211,#212,#213,#214,#215,#216,#217,#218,#219,#220,#221,#222,#223,
#160,#161,#162,#222,#164,#165,#166,#167,#168,#169,#170,#171,#172,#173,#174,#175,
#176,#177,#178,#221,#180,#181,#182,#183,#184,#185,#186,#187,#188,#189,#190,#191,
#254,#224,#225,#246,#228,#229,#244,#227,#245,#232,#233,#234,#235,#236,#237,#238,
#239,#223,#240,#241,#242,#243,#230,#226,#252,#251,#231,#248,#253,#249,#247,#250,
#158,#128,#129,#150,#132,#133,#148,#131,#149,#136,#137,#138,#139,#140,#141,#142,
#143,#159,#144,#145,#146,#147,#134,#130,#156,#155,#135,#152,#157,#153,#151,#154)
);
function convert_cyr_string(const str : AnsiString; const from, to_ : AnsiChar) : AnsiString;
var
iFrom,iTo: Shortint;
i, len: Integer;
tmp: AnsiChar;
begin
iFrom := -1;
iTo := -1;
Result := '';
case UpCase(from) of
'W': iFrom := cyr_win1251; //
'A','D': iFrom := cyr_cp866;
'I': iFrom := cyr_iso88595;
'M': iFrom := cyr_mac;
'K': ;
else
exit;
end;
case UpCase(to_) of
'W': iTo := cyr_win1251; //
'A','D': iTo := cyr_cp866;
'I': iTo := cyr_iso88595;
'M': iTo := cyr_mac;
'K': ;
else
exit;
end;
len := Length(str);
SetLength(Result, len);
for i := 1 to len do
begin
if iFrom = -1 then
tmp := str[i]
else
tmp := CYR_TABLES[iFrom][ ord(str[i]) ];
if iTo = -1 then
Result[i] := tmp
else
Result[i] := CYR_TABLES[iTo][ ord(tmp) + 256 ];
end;
end;
Добавлено спустя 2 часа 10 минут 27 секунд:
Умный аналог Copy из php - substr. Легко может заменить кучу функций для работы со строками.
substr - возвращает подстроку строки string длиной length, начинающегося с start символа по счету.
Если start неотрицателен, возвращаемая подстрока начинается в позиции start от начала строки, считая от нуля. Например, в строке 'abcdef', в позиции 0 находится символ 'a', в позиции 2 - символ 'c', и т.д.
http://php.su/functions/?substr
- Код: Выделить всё
function substr(const S: AnsiString; From, Len: Integer): AnsiString; overload;
var
i, input_len: integer;
begin
input_len := Length(S);
if from < 0 then
inc(from, input_len);
if len < 0 then
begin
Len := (input_len + Len) - from;
if Len < 1 then
begin
Result := '';
exit;
end;
end;
Result := Copy(S, from+1, Len);
end;
function substr(const S: AnsiString; From: Integer): AnsiString; overload;
begin
Result := substr(S, From, Length(S) - abs(from));
end;