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


Автор: supervladislav 23.9.2012, 21:03
Скажите есть ли подобие функции Split или explode как в php , может нужно использовать какойнибудь иной модуль? 

Автор: Данкинг 23.9.2012, 21:19
Подобия Split (если я правильно понимаю, что она делает) нет. Есть функция COPY. Если же нужно разбить строку на подстроки на основе какого-то символа, то ищи по форуму слово GETWORDNUM.

Автор: northener 23.9.2012, 21:19
Посмотри на TStringList.DelimitedText

Автор: Keeper89 24.9.2012, 03:23
Я просто оставлю это здесь: http://docwiki.embarcadero.com/Libraries/en/System.StrUtils.SplitString

Автор: Qu1nt 24.9.2012, 09:54
http://docwiki.embarcadero.com/Libraries/en/System.RegularExpressions.TRegEx.Split

Автор: supervladislav 24.9.2012, 15:21
Данкинг, написли бы хотябы краткое описание по аргументам функции ,что надо передать ,что она возвратит.

Автор: Данкинг 24.9.2012, 16:01
Параметры: разделяемая строка, разделитель, порядковый номер разделяемого слова. Т.е.
getwordnum ('бугога@мугога@ололо','@','2') возвратит "мугога".

Автор: supervladislav 24.9.2012, 16:49
Keeper89, Qu1nt, скажите  для работы данной функции надо подключить модуль?

Добавлено через 3 минуты и 55 секунд
Данкинг, а ак определить общее колличество слов?

Добавлено через 7 минут и 48 секунд
Данкинг, я не очень понял ,что такое порядковый номер разделяемого слова?

Автор: supervladislav 24.9.2012, 17:26
Данкинг, Как мне все то слова возвратить?

Автор: Данкинг 24.9.2012, 17:39
Цитата(supervladislav @  24.9.2012,  17:49 Найти цитируемый пост)
Данкинг, а ак определить общее колличество слов?

Никак, только самому писать функцию для подсчёта.
Цитата(supervladislav @  24.9.2012,  17:49 Найти цитируемый пост)
что такое порядковый номер разделяемого слова? 

Как "что такое"? Ты строку-то на подстроки разбиваешь. Вот порядковый номер подстроки и есть.

Автор: supervladislav 24.9.2012, 18:01
Данкинг,всёравно спасибо.
Обращаясь ко всем остальным неучтно никто не работал вот с этимим компонентами/модулями?
http://docwiki.embarcadero.com/Libraries/e...ns.TRegEx.Split

Автор: northener 24.9.2012, 18:07
Ещё раз повторю - TStringList.DelimitedText 
TStringList сам разделит строку на слова и поместит каждое слово в свою Strings[].

Автор: supervladislav 24.9.2012, 20:54
northener, скажите , а как класс компонента объявлять в контексте продцедуры .
А как лучше , можно ли его сделать глобальным для всех продцедур и функций, или так лучше не делать?
Код

procedure TForm1.Button2Click(Sender: TObject);
var s:integer;
var  strs:TStringList;


begin
strs:=TStringList.Create;
If OpenDialog1.Execute then
begin
for s:=0 to 16 do

ShowMessage(strs.DelimitedText(load(OpenDialog1.FileName)));

end;
end;

Автор: Данкинг 24.9.2012, 21:02
supervladislav, чем тебе моя функция не нравится: я её столько раз уже юзал, что не представляю, как можно обходиться без оной в подобных случаях.

Автор: supervladislav 24.9.2012, 22:57
northener, выдаётся вот такая ошибка
 [DCC Error] Unit1.pas(281): Missing operator or semicolon
вот в этой строке.
Код

strs.DelimitedText(load(OpenDialog1.FileName)))

Скажите может надо использовать цикл ,чтобы вытащить оттудова строки , функция Load возвращает массив.
Народ ,почему ниводной документации толково не написано ,какие  данные являются входящимим вот сюда?
Код

DelimitedText

Что мне возвратит DelimitedText

Автор: Данкинг 24.9.2012, 23:09
Цитата(supervladislav @  24.9.2012,  23:57 Найти цитируемый пост)
вот в этой строке.

Число открывающих и закрывающих скобок не совпадает, дальше можно уже не смотреть.

Автор: northener 25.9.2012, 00:29
Цитата(supervladislav @  24.9.2012,  22:57 Найти цитируемый пост)
какие  данные являются входящимим вот сюда?

Вот тебе пример использования TStringList для разбития строки на отдельные слова.

Автор: supervladislav 25.9.2012, 16:42
northener, посмотрел несколько очень хороших примеров 
Вроде написал вот так, но компилятор тылдычет вот на этой строке , 
но где тут может быть пропущена точка или скобка ума не приложу.
[DCC Error] Unit1.pas(278): E2066 Missing operator or semicolon
Код

strs.DelimitedText(load(OpenDialog1.FileName));




Код

procedure TForm1.Button2Click(Sender: TObject);
var s:integer;
var  strs:TStringList;
begin
strs:=TStringList.Create;
If OpenDialog1.Execute then
begin
strs.Delimiter := ' ';
strs.QuoteChar:= ',';
strs.DelimitedText(load(OpenDialog1.FileName));
for s:=0 to strs.Count  do
ShowMessage(strs[s]);
end;
end;


Автор: Данкинг 25.9.2012, 16:54
supervladislav, ты смотрел пример northener'а ?
Код

procedure TForm30.Button1Click(Sender: TObject);
var
  StL : TStringList;
  i : Integer;
begin
  StL:=TStringList.Create;
  try
    StL.Delimiter:=#32; //Пробел
    StL.DelimitedText:=Edit1.Text;
    Memo1.Lines.Clear;
    for i:=0 to StL.Count-1 do Memo1.Lines.Add(StL[i]);
  finally
    StL.Free;
  end;
end;


Автор: supervladislav 25.9.2012, 17:03
Данкинг, 
northener, я смотрел его пример, но просто к этому времени я уже смог сделать свой пример пока неработоспособный,
вот туе я увидел вариант примера
http://www.delphibasics.ru/TStringList.php

Автор: supervladislav 25.9.2012, 18:25
northener, пока не понял ваш пример слишком пока много непонятных мне компонентов , сейчас почитаю.

Автор: northener 26.9.2012, 01:28
Цитата(supervladislav @  25.9.2012,  18:25 Найти цитируемый пост)
northener, пока не понял ваш пример слишком пока много непонятных мне компонентов

Да чего ж там "слишком много непонятного" в дюжине строчек?
Цитата(supervladislav @  25.9.2012,  16:42 Найти цитируемый пост)
strs.DelimitedText(load(OpenDialog1.FileName));

Откуда ты взял сей код? Он явно не Дельфийский.

Автор: supervladislav 26.9.2012, 20:44
northener, это привычка осталась от php.

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