![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция
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;