split string

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

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

Ответить
Mayor
новенький
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14

split string

Сообщение Mayor »

split string

чем можно разбить строку на слова?

var s : ansistring;
m : array of ansistring;

procedure ....

m := s

return количество слов
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

ручками, перебираешь до пробела и засовываешь в масив
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Когда я вел речь о том есть ли нормальная либа в FP для работы со строками я говорил и о такой функции. Например в Python это делается так:

Код: Выделить всё

list_of_words = 'слово1 слово2 и т.д.'.split(' ')
assert list_of_words[0] == 'слово1'
assert list_of_words[1] == 'слово2'
assert list_of_words[2] == 'и'
assert list_of_words[3] == 'т.д.'

А как так же просто этого добиться на FP я не знаю :-).

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

Сообщение alexs »

посмотри модуль strings - кажется там есть
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Код: Выделить всё

type
  TStringArray = array of string;

function Explode(Ch: Char; const Text: string): TStringArray;
var
  i, k, Len: Integer;
  Count: Integer;
begin
  if Text = '' then
  begin
    Result := nil;
    Exit;
  end; // if
  Count := 0;
  Len := Length(Text);
  for i := 1 to Len do
  begin
    if Text[i] = Ch then Inc(Count);
  end; // for i
  SetLength(Result, Count + 1);
  Count := 0;
  k := 1;
  for i := 1 to Len do
  begin
    if Text[i] = Ch then
    begin
      Result[Count] := Copy(Text, k, i - k);
      Inc(Count);
      k := i + 1;
    end; // if
  end;
  Result[Count] := Copy(Text, k, Len - k + 1);
end;
voltron
новенький
Сообщения: 64
Зарегистрирован: 06.07.2007 13:27:46
Откуда: Украина

Сообщение voltron »

Думаю, можно обойтись и средствами самого FPC. В юните StrUtils есть функции

Код: Выделить всё

function WordCount(const S: string; const WordDelims: TSysCharSet): Integer;
function ExtractWord(N: Integer; const S: string;  const WordDelims: TSysCharSet): string;inline;

Первая возвращает количество слов, разделенных заданным разделителем (или разделителями), в строке. А вторая возвращает слово по его номеру и разделителям.
Ответить