Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Строка   Найти похожие ветки 

 
Parus ©   (2006-03-23 09:17) [0]

Помогите пожалуста сделать такую вещь: имеется строка какого типа 7676,8787 и надо из дельфии это "разложить" в две переменные типа "String" так чтобы что ДО ЗАПЯТОЙ было в первой переменной ,А ПОСЛЕ ЗАПЯТОЙ во вторую переменную. Но запятая может быть и ЛЮБЫМ символом.
Я сейчас что-то такое написал но во время ранирования вся зависло :-(  (а я н-НЕ сохрапнился).


 
Johnmen ©   (2006-03-23 09:23) [1]

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


 
Parus ©   (2006-03-23 09:48) [2]


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

Вот в чём: и надо из дельфии это "разложить" в две переменные типа "String" так чтобы что ДО ЗАПЯТОЙ было в первой переменной ,А ПОСЛЕ ЗАПЯТОЙ во вторую переменную. Но запятая может быть и ЛЮБЫМ символом.
Я сейчас что-то такое написал но во время ранирования вся зависло :-(  (а я н-НЕ сохрапнился).


 
Leonid Troyanovsky ©   (2006-03-23 09:51) [3]


> Parus ©   (23.03.06 09:48) [2]

> ,А ПОСЛЕ ЗАПЯТОЙ во вторую переменную. Но запятая может
> быть и ЛЮБЫМ символом.


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

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2006-03-23 09:53) [4]

Parus ©   (23.03.06 09:48) [2]
Что сам то делал?


 
Anatoly Podgoretsky ©   (2006-03-23 09:54) [5]

Leonid Troyanovsky ©   (23.03.06 09:51) [3]
Задача имеет решение, только результат неверный.


 
Плохиш ©   (2006-03-23 11:06) [6]

Pos/Copy/Delete спасут отца русской демократии, после того как он включит думалку.


 
perat ©   (2006-03-23 11:45) [7]

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;


 
Parus ©   (2006-03-23 18:45) [8]


> В общем случае задача решения не имеет.
> Т.е., если запятая может быть цифрой, то как изволите делить.
>

У меня числа целые, А код буду пробовать!Спосыба!


 
Parus ©   (2006-03-28 11:59) [9]

Долго химичил, вот код:

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;

______________________________
КОД НЕ ОПТИМИЗИРОВАН и не форматирован!!! (я и так его едва написал :) )


 
Anatoly Podgoretsky ©   (2006-03-28 12:18) [10]

Код неверный, а так как тебе удалось его откомпилировать, то это означает подавление ошибок в компиляторе.


 
Parus ©   (2006-03-28 14:57) [11]

Удалено модератором
Примечание: Личная переписка


 
Parus ©   (2006-03-28 14:58) [12]

Tpoint это просто, я не сказал что мне числа нужны!


 
Сергей М. ©   (2006-03-28 15:02) [13]


> Parus ©   (28.03.06 14:57) [11]


> Все работает!


> for h := 0 to length(s) do
> begin
> if s[h]="," then


Лажа - здесь.
Символы строки индексируются начиная с единицы, а не с нуля.
Все остальные твои ф-ции, опирающиеся на работу данной, получая заведомо неверный результат не могут работать правильно в принципе


 
Boris Marchenko ©   (2006-03-28 17:46) [14]

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)


 
Boris Marchenko ©   (2006-03-28 17:48) [15]

Т. е. все это:
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 строки


 
EvS ©   (2006-03-28 20:02) [16]

>for i := 1 to length(S) do
> if S[i] = "," then Break;

i:=Pos(S,",")



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
2-1143965258
0lesya
2006-04-02 12:07
2006.04.16
Как с программой написанной под 5-м Delphi работать под 7-м!


1-1142333840
DelphiLexx
2006-03-14 13:57
2006.04.16
Растягивание TListBox


1-1142417495
КиТаЯц
2006-03-15 13:11
2006.04.16
OpenOffice вместо MSExcel


15-1143096388
Dec
2006-03-23 09:46
2006.04.16
Подскажите хороший форум по VBA


15-1142932132
Pazitron_Brain
2006-03-21 12:08
2006.04.16
Как настроить у себя веб-сервер