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

Модератор: Модераторы

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

Сообщение devels » 26.03.2011 13:53:33

Я создал эту тему, т.к. накопилось большое количество функций аналогов из пхп, они практически все полностью идентичны оригиналам, некоторые довольно сложно найти в интернете, многие написал сам, некоторые переписал с си, некоторые чуть подкорректировал.

Хочется поделиться, все таки чтобы такой труд не пропадал даром, многим думаю пригодится.

Тема будет постоянно пополняться и обновляться. Все функции оптимизированы для быстрого выполнения.

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;
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

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

Сообщение Maxizar » 28.03.2011 18:16:31

А можно вот это:
strstr — Находит первое вхождение подстроки

Переделать на что-то типа этого:
strstr — возвращает строку, начиная спервого вхождения Srch в строке S и и до конца строки S, если вхождений нет, вернет пустую строку.
А то просто (Находит первое вхождение подстроки) это получается что мы переписали процедуру Pos.

PS. Спасибо, что поделились исходниками.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

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

Сообщение Ustas » 16.02.2015 12:41:42

wordwrap не поддерживает UTF8 кирилицу.
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

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

Сообщение Rimmared » 08.02.2018 13:16:26

Для определения размерности массива в PHP существует как минимум две функции - sizeof и count.

Я предпочитаю использовать функцию count. Например так:

Код:
Аватара пользователя
Rimmared
незнакомец
 
Сообщения: 3
Зарегистрирован: 05.02.2018 19:13:34
Откуда: United States

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

Сообщение Mirage » 09.02.2018 00:39:24

Для этого репозиторий на гитхабе лучше создать. Может кому и пригодится.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Ichthyander » 09.02.2018 12:36:07

Да, на github к тому же могут присоединится к разработке программисты со всего мира. Самого иногда интересуют аналоги PHP функций в Pascal для легкого портирования некоторых библиотек
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru