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

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

Функция


Страницы:   1 2

Fu ©   (2006-08-10 19:50:00) 

Какая в делфи есть функция , чтобы строке s1 присвоить текст меежду запятыми от строки s.
код:
s:='blablabla;1234566;blablablabla';
а s1 должно принимать значение 1234566 соответственно


!_SM_!   (2006-08-11 03:00:00) [21]

> [0] Fu   (10.08.06 19:50)

Up.

> s1 присвоить текст меежду запятыми от строки s

Тут в примере в строке S и запятых то нет...
Ну может пойдет такой вариант: Удалить текст до первого разделителя (каким образом? можно на основе примера [2] tesseract ©) (delete(Stroka, 1, Pos(',', Stroka));- это для первого разделителя) и от последнего до конца строки, а потом уже из того что осталось поудалять разделители любым понравившимся способом... Может это надо автору... т.е. перед первым разделителем и после последнего текст не нужен?
то Fu А что будет если во входной строке (s) будет 1 запятая (разделитель)?


!_SM_!   (2006-08-11 02:49:00) [22]

> [8] Loginov Dmitry ©   (10.08.06 20:44)

function Functiya(const Stroka: String; const Ch: Char): String;
var N, LenS: Integer;
begin
 Result := '';
 LenS := Length(Stroka);
 for N:= LenS downto 1 do
  if Stroka[N] <> Ch then Result := Stroka[N] + Result;
end;


А так не лучше? Да какая разница, можно кучу вариантов придумать.
Вот вариант короче:

function Functiya(const Stroka: String; const Ch: Char): String;
var N: Integer;
begin
 Result := '';
 for N:= Length(Stroka) downto 1 do
  if Stroka[N] <> Ch then Result := Stroka[N] + Result;
end;


Но так мне кажеться будет медленнее. Выполнять функцию Length много раз... Т.е. в цикле будет каждый раз высчитываться Length(Stroka) и сравниваться с N. Или не так, ошибаюсь....?

Хотя в вопросе автора немного непонятно

> строке s1 присвоить текст меежду запятыми от строки s.
> код:
> s:='blablabla;1234566;blablablabla';
> а s1 должно принимать значение 1234566соответственно

???????


tesseract   (2006-08-10 20:45:00) [23]

> [7] Loginov Dmitry ©   (10.08.06 20:42)


[2] пашет. Проверил.


Loginov Dmitry   (2006-08-10 20:44:00) [24]

А лучше так:

function Functiya(Stroka: string): string;
begin
Result := '';
with TStringList.Create do
try
  Delimiter := ';';
  DelimitedText := Stroka;
  Result := Strings[1];
finally
  Free;
end;
end;


Loginov Dmitry   (2006-08-10 20:42:00) [25]

Не.. Так тоже работать не будет. Так надо:

function Functiya(Stroka: string): string;
var
 S1: string;
begin
 with TStringList.Create do
 try
   Delimiter := ';';
   DelimitedText := Stroka;
   S1 := Strings[1];
 finally
   Free;
 end;
end;


Loginov Dmitry   (2006-08-10 20:40:00) [26]

Ладно попробуй [2]

Можешь так еще:

with TStringList.Create do
try
 Delimiter := ';';
 DelimitedText := 'blablabla;1234566;blablablabla';
 S1 := Strings[1];
finally
 Free;
end;
 ShowMessage(S1);


Fu   (2006-08-10 20:27:00) [27]

в  делфи


Loginov Dmitry   (2006-08-10 20:23:00) [28]

> не работает :(


А в чем компилируешь?


Fu   (2006-08-10 20:01:00) [29]

> Programmer(ProgramDescription:String):TProgram;

не работает :(


Virgo_Style   (2006-08-10 19:58:00) [30]

Programmer(ProgramDescription:String):TProgram;


tesseract   (2006-08-10 19:58:00) [31]

Пример, как из строки выдрать подстроку до разделителя, извлечённая подстрока удаляется, писалась на лету :

function Next(var value:String;rasd:char):string;
  begin
if Length(value)=0 then exit;
    if pos(rasd,value)=0 then
     begin
     result:=(value);
     value:='';
     exit;
     end
     else
     result:=copy(value,1,pos(rasd,value)-1);
    delete(value,1,pos(rasd,value));
  end;


Страницы:   1 2

Наверх

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