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

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

Строка [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]

А в чём проблема?


Наверх

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