Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Расщепление строки


t4 ©   (2005-01-05 14:08:00) 

Уважаемые мастера.
Скажите как из строки 'лимон яблоко киви'
выбрать лимон яблоко киви и
засунуть их label1,label2,label3.Caption соответственно
Спасибо.


GuAV   (2005-01-05 16:05:00) [1]

2 ssk ©
Как это готового не было ?


> begin...end ©   (05.01.05 14:09) [1] [Новое
>сообщение][Ответить]
> TStringList


ssk   (2005-01-05 14:43:00) [2]

>KSergey ©   (05.01.05 14:38) [8]

ну не было у меня готовой функции, ну не было. :-D
вот и пришлось набросать то, что первым пришло в голову.


ssk   (2005-01-05 14:40:00) [3]

>KSergey ©   (05.01.05 14:38) [8]
>  [6] ssk ©   (05.01.05 14:31)

По-моему, очень неудачная реализация ввиду больших накладных расходов: для поиска пробелов постоянно модифицируется длина строки, что очень ресурсоемко. Вполне можно просто побегать по строке и найти позиции откуда и до куда вырезать - и сразу вырезать одним махом.


согласен на все 100%. писалось давно и для коротких строк. так что я думаю, при длине строки пусть даже в 10-20 слов, скорость сильно не упадет.


ssk   (2005-01-05 14:39:00) [4]

ну конечено же, возвращает слово!
если есть строка "яблоко лимон апельсин", то GetSubStr('яблоко лимон апельсин', 2) вернет 'лимон'


KSergey   (2005-01-05 14:39:00) [5]

> [8] KSergey ©   (05.01.05 14:38)
> для поиска пробелов постоянно модифицируется длина
> строки,

В смысле даже не просто длина, а первый символ удаляется, т.е. строка постоянно перекопируется...


KSergey   (2005-01-05 14:38:00) [6]

>  [6] ssk ©   (05.01.05 14:31)

По-моему, очень неудачная реализация ввиду больших накладных расходов: для поиска пробелов постоянно модифицируется длина строки, что очень ресурсоемко. Вполне можно просто побегать по строке и найти позиции откуда и до куда вырезать - и сразу вырезать одним махом.

См. так же StrUtils из RxLib.


begin...end   (2005-01-05 14:36:00) [7]

> [6] ssk ©   (05.01.05 14:31)

> функция возвращает номер слова из строки

Функция явно не номер возвращает.


ssk   (2005-01-05 14:31:00) [8]

добавлю и я свою копеечку:

функция возвращает номер слова из строки
str - строка
Index - номер слова

function GetSubStr(str: string; Index: byte): string;
var
 w: string;
begin
 repeat
   str := TrimLeft(str);
   w := '';
   repeat
     if Length(str) > 0 then
       begin
         w := w + str[1];
         delete(str, 1, 1);
       end;
   until (pos(' ', str) = 1) or (Length(str) = 0);
   dec(Index);
 until Index = 0;
 Result := w;
end;


KSergey   (2005-01-05 14:26:00) [9]

Сегодня выщеплять слова - несомненный хит!


begin...end   (2005-01-05 14:19:00) [10]

> t4   (05.01.05 14:08)

См. также:

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1104831952&n=0


franky   (2005-01-05 14:13:00) [11]

Функция сору позволяет выделить фрагмент строки. В общем виде обращение к функции сору выглядит так:
сору( Строка, р, п ) где:
строка — выражение строкового типа, содержащее строку, фрагмент которой надо получить;
р — номер первого символа, с которого начинается выделяемая подстрока;
n — длина выделяемой подстроки. Например, в результате выполнения инструкций
st:= 'Инженер Иванов'; fam:=copy(st, 9, 6) ;
значением переменной fam будет строка 'Иванов1.


franky   (2005-01-05 14:11:00) [12]


> Уважаемые мастера.
> Скажите как из строки 'лимон яблоко киви'
> выбрать лимон яблоко киви и
> засунуть их label1,label2,label3.Caption соответственно
> Спасибо.


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

сору( Строка, р, п ) где:

строка — выражение строкового типа, содержащее строку, фрагмент которой надо получить;
р— номер первого символа, с которого начинается выделяемая подстрока;
n— длина выделяемой подстроки. Например, в результате выполнения инструкций


begin...end   (2005-01-05 14:09:00) [13]

TStringList


Наверх

Титульная страница Поиск, карта сайта Написать письмо