![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Строка [D2005, XP]
Parus © (2006-03-23 09:17:00)Помогите пожалуста сделать такую вещь: имеется строка какого типа 7676,8787 и надо из дельфии это "разложить" в две переменные типа "String" так чтобы что ДО ЗАПЯТОЙ было в первой переменной ,А ПОСЛЕ ЗАПЯТОЙ во вторую переменную. Но запятая может быть и ЛЮБЫМ символом.
Я сейчас что-то такое написал но во время ранирования вся зависло :-( (а я н-НЕ сохрапнился).
EvS (2006-03-28 20:02:00) [1]>for i := 1 to length(S) do
> if S[i] = ',' then Break;
i:=Pos(S,',')
Boris Marchenko (2006-03-28 17:48:00) [2]Т. е. все это:
function doz(s:string):string; //исп. предыдущую функцию узнаём что до запятой
var
sp:string;
i:integer;
begin
sp:='';
for i := 1 to zap(s)-1 do
begin
sp:=sp+s[i];
end;
result:=sp;
end;
function poz(s:string):string ; //Аналогично предыдущей... после запятой
var
sp:string;
i:integer;
begin
sp:='';
for i := zap(s)+1 to length(s) do
begin
sp:=sp+s[i];
end;
result:=sp;
end;
вмещается в 2 строки
Boris Marchenko (2006-03-28 17:46:00) [3]S - строка
for i := 1 to length(S) do
if S[i] = ',' then Break;
First := StrToInt(AnsiMidStr(S, 1, i - 1));
Last := StrToInt(AnsiMidStr(S, i + 1, Length(S) - i));
Имхо, так. Перебор символов до нахождения запятой, тогда брейк, переменная i хранит номер символа ','. Далее мы с помощью StrToInt получаем из строки кусок до запятой (с 1 символа, длиной i - 1) и кусок после запятой (с номера символа после запятой длиной Length(S) - i)
Сергей М. (2006-03-28 15:02:00) [4]
> Parus © (28.03.06 14:57) [11]
> Все работает!
> for h := 0 to length(s) do
> begin
> if s[h]=',' then
Лажа - здесь.
Символы строки индексируются начиная с единицы, а не с нуля.
Все остальные твои ф-ции, опирающиеся на работу данной, получая заведомо неверный результат не могут работать правильно в принципе
Parus (2006-03-28 14:58:00) [5]Tpoint это просто, я не сказал что мне числа нужны!
Parus (2006-03-28 14:57:00) [6]Удалено модератором
Примечание: Личная переписка
Anatoly Podgoretsky (2006-03-28 12:18:00) [7]Код неверный, а так как тебе удалось его откомпилировать, то это означает подавление ошибок в компиляторе.
Parus (2006-03-28 11:59:00) [8]Долго химичил, вот код:
function zap(s:string):integer; // определяем каким симв. является ,
var
h:integer;
begin
for h := 0 to length(s) do
begin
if s[h]=',' then
begin
result:=h;
end;
end;
end;
function doz(s:string):string; //исп. предыдущую функцию узнаём что до запятой
var
sp:string;
i:integer;
begin
sp:='';
for i := 1 to zap(s)-1 do
begin
sp:=sp+s[i];
end;
result:=sp;
end;
function poz(s:string):string ; //Аналогично предыдущей... после запятой
var
sp:string;
i:integer;
begin
sp:='';
for i := zap(s)+1 to length(s) do
begin
sp:=sp+s[i];
end;
result:=sp;
end;
function poi(s:string):TPoint ; //используя POZ и DOZ даём Tpoint x-до запятой, y-после
var
P:Tpoint;
begin
p.X:=strtoint(doz(s));
p.Y:=strtoint(poz(s));
result:=p;
end;
______________________________
КОД НЕ ОПТИМИЗИРОВАН и не форматирован!!! (я и так его едва написал :) )
Parus (2006-03-23 18:45:00) [9]
> В общем случае задача решения не имеет.
> Т.е., если запятая может быть цифрой, то как изволите делить.
>
У меня числа целые, А код буду пробовать!Спосыба!
perat (2006-03-23 11:45:00) [10]procedure TForm1.Button1Click(Sender: TObject);
var a,b,x,zn:string;
i:integer;
begin
edit2.MaxLength:=1;
x:=edit1.text;
zn:=edit2.text;
i:=pos(zn,x);
a:=copy(x,1,i-1);
b:=copy(x,i+1,length(x)-i);
memo1.lines.add(a);
memo1.lines.add(b);
end;
Плохиш (2006-03-23 11:06:00) [11]Pos/Copy/Delete спасут отца русской демократии, после того как он включит думалку.
Anatoly Podgoretsky (2006-03-23 09:54:00) [12]Leonid Troyanovsky © (23.03.06 09:51) [3]
Задача имеет решение, только результат неверный.
Anatoly Podgoretsky (2006-03-23 09:53:00) [13]Parus © (23.03.06 09:48) [2]
Что сам то делал?
Leonid Troyanovsky (2006-03-23 09:51:00) [14]
> Parus © (23.03.06 09:48) [2]
> ,А ПОСЛЕ ЗАПЯТОЙ во вторую переменную. Но запятая может
> быть и ЛЮБЫМ символом.
В общем случае задача решения не имеет.
Т.е., если запятая может быть цифрой, то как изволите делить.
--
Regards, LVT.
Parus (2006-03-23 09:48:00) [15]
> А в чём проблема?
Вот в чём: и надо из дельфии это "разложить" в две переменные типа "String" так чтобы что ДО ЗАПЯТОЙ было в первой переменной ,А ПОСЛЕ ЗАПЯТОЙ во вторую переменную. Но запятая может быть и ЛЮБЫМ символом.
Я сейчас что-то такое написал но во время ранирования вся зависло :-( (а я н-НЕ сохрапнился).
Johnmen (2006-03-23 09:23:00) [16]А в чём проблема?