Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > аналог функции str_pad?


Автор: knyshow 16.2.2010, 14:50
Цитата

string str_pad (string input, int pad_length [, string pad_string [, int pad_type]])
Эта функция возвращает строку input, дополненную слева, справа или с обоих сторон до заданной аргументом pad_length длины строкой pad_string. По умолчанию pad_string содержит пробел.
Необязательный аргумент pad_type может иметь значение STR_PAD_RIGHT, STR_PAD_LEFT или STR_PAD_BOTH, по умолчанию STR_PAD_RIGHT/ 
Если pad_length меньше длины строки input, строка возвращается без изменений. 


Код

<?php 
$input = "Alien"; 
echo str_pad($input, 10);                      // выводит "Alien     " 
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // выводит "-=-=-Alien" 
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // выводит "__Alien___" 
echo str_pad($input, 6 , "___");               // выводит "Alien_" 
?>


Ребят, аналогичная функция в Delphi ну просто обязана быть, но не найду :(
Ткните носом плиз.
Или все-таки самому писать? :(

Автор: Rennigth 16.2.2010, 19:21
Цитата(knyshow @  16.2.2010,  14:50 Найти цитируемый пост)
Или все-таки самому писать? :( 

 smile 
Delphi и php все-таки разные вещи )))
Сейчас если никто не отвлечет накатаю.

Автор: Qu1nt 16.2.2010, 22:04
Вот, запилил smile
Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, StrUtils, Math;

type
  TPadType = (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH);

function StrPad(const Text: String; Count: Integer; const Pad: String = ' ';
  Mode: TPadType = STR_PAD_RIGHT): String;
begin
  Dec(Count, Length(Text));
  Result := LeftStr(DupeString(Pad, Count), Count);
  case Mode of
    STR_PAD_LEFT  : Result := Result + Text;
    STR_PAD_RIGHT : Result := Text + Result;
    STR_PAD_BOTH  : Result := LeftStr(Result, Length(Result) div 2) + Text +
      LeftStr(Result, Ceil(Length(Result) / 2));
  end;
end;

procedure Echo(const Text: String);
begin
  WriteLn(Format('"%s"', [Text]));
end;

var
  Input: String = 'Alien';

begin
  Echo(StrPad(Input, 10));
  Echo(StrPad(Input, 10, '-=', STR_PAD_LEFT));
  Echo(StrPad(Input, 10, '_', STR_PAD_BOTH));
  Echo(StrPad(Input, 6, '___'));
  ReadLn;
end.

Автор: Rennigth 16.2.2010, 22:37
Код

type
  TPadType = (STR_PAD_RIGHT, STR_PAD_LEFT, STR_PAD_BOTH);

function str_pad(const input_str: string; pad_length: Integer;
  const pad_str: string = ' '; pad_type: TPadType = STR_PAD_RIGHT): string;
var
  lrlLength, lrLength, llLength, lBothIndex: Integer;
  lpadstr, lrpadstr, llpadstr: string;
begin
  Result := '';

  if (Length(input_str) < Length(pad_str)) or (Length(pad_str) > pad_length) or
    (Length(input_str) > pad_length) then
    raise Exception.Create('error input params');

  lpadstr := '';
  llpadstr := '';
  lrpadstr := '';

  if (pad_type = STR_PAD_RIGHT) or (pad_type = STR_PAD_LEFT) then
  begin
    lrlLength := pad_length - Length(input_str);
    while lrlLength >= Length(lpadstr) do
      lpadstr := lpadstr + pad_str;
    lpadstr := Copy(lpadstr, 1, lrlLength);
  end;

  case pad_type of
    STR_PAD_RIGHT:
      Result := input_str + lpadstr;
    STR_PAD_LEFT:
      Result := lpadstr + input_str;
    STR_PAD_BOTH:
    begin
      lBothIndex := Trunc((pad_length - Length(input_str))/2);
      lrLength := lBothIndex;
      llLength :=  pad_length - lBothIndex - Length(input_str);
      while lrLength >= Length(lrpadstr) - Length(pad_str) do
        lrpadstr := lrpadstr + pad_str;
      while llLength >= Length(llpadstr) - Length(pad_str) do
        llpadstr := llpadstr + pad_str;

      llpadstr := Copy(llpadstr, 1, llLength);
      lrpadstr := Copy(lrpadstr, 1, lrLength);

      Result := lrpadstr + input_str + llpadstr;
    end;
  end;
end;

Вот что получилось...

Добавлено через 20 секунд
О, опоздал )))

Добавлено через 3 минуты и 11 секунд
хех, про DupeString забыл )))

Автор: knyshow 16.2.2010, 22:58
Цитата

Delphi и php все-таки разные вещи )))
но строковые функции они ведь строковые функции smile

Спасибо, ребят smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)