Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизСтрока Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c