Аналог explode из PHP

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Аналог explode из PHP

Сообщение metallic » 24.11.2006 17:27:08

есть ли во фрипаскале такая функция как в PHP которая разивает строку в массив по подстроке. Например есть строка a^b^c^d ее нужно разбить в массив по символу ^
Соответственно элементами массива будут a, b, c, d
metallic
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.11.2006 17:20:07

Сообщение alexs » 25.11.2006 02:34:52

а зачем тут функция - тут три строки кода - вызов Pos и цикл
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение shade » 26.11.2006 23:22:41

Код: Выделить всё
type
  TStringArr = array of string;

так:
Код: Выделить всё
function explode(Delim: Char; const S: string): TStringArr;
var i, k, Len, Count: Integer;
begin
  Len := Length(S);
  Count := 0;
  k := 1;
  for i := 1 to Len do
  begin
    if S[i] = Delim then
    begin
      Inc(Count);
      SetLength(Result, Count);
      SetString(Result[Count-1], PChar(@S[k]), i-k);
      k := i + 1;
    end; // if
  end; // for i
  Inc(Count);
  SetLength(Result, Count);
  SetString(Result[Count-1], PChar(@S[k]), Len-k+1);
end;
или так
Код: Выделить всё
function explode(Delim: Char; const S: string): TStringArr;
var i, k, Len, Count: Integer;
begin
  Len := Length(S);
  Count := 0;
  for i := 1 to Len do
    if S[i] = Delim then Inc(Count);
  SetLength(Result, Count + 1);
  Count := 0;
  k := 1;
  for i := 1 to Len do
  begin
    if S[i] = Delim then
    begin
      Inc(Count);
      SetString(Result[Count-1], PChar(@S[k]), i-k);
      k := i + 1;
    end;
  end; // for i
  Inc(Count);
  SetString(Result[Count-1], PChar(@S[k]), Len-k+1);
end;


Код: Выделить всё
procedure test_explode(const S: string);
var
  arr: TStringArr;
  i, Len: Integer;
begin
  writeln(S);
  arr := explode2('\', S);
  Len := Length(arr);
  for i := 0 to Len-1 do
  begin
    writeln(arr[i]);
  end; // for i
end;
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение SergKam » 29.11.2006 01:23:27

Такие нужные функции надо добавлять в RTL SysUtils.
Я тоже часто такое пишу, каждый раз вспоминаю как надо.
Предложите ее команде FPC.
а еще загрузка строк из файла и запись строки в файл, а еще
модуль регулярного выражения perl,и тп.
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение Nesmit » 17.12.2006 15:54:17

Хорошее дело, добавить строковые функции.
Например, не нашел GradToDeg. А хотелось бы :)

В разумных пределах, чтоб разрабы не отвлекались от доводки самого фрипаскаля. ;)
Nesmit
новенький
 
Сообщения: 17
Зарегистрирован: 20.11.2006 13:35:50

Сообщение shade » 17.12.2006 20:29:25

Nesmit писал(а):Например, не нашел GradToDeg. А хотелось бы

А что она делает: переводит значения угла из градов, в градусы?, так вроде все просто GradToDeg = 0.90 * Deg
и причем тут строки?
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Nesmit » 17.12.2006 20:57:04

Потому что нет такой функции, хоть и примитивная.
Nesmit
новенький
 
Сообщения: 17
Зарегистрирован: 20.11.2006 13:35:50

Сообщение shade » 17.12.2006 23:06:32

Nesmit писал(а):Потому что нет такой функции, хоть и примитивная.

Вот потому-то и нет, что примитивная...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru