Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1143572066
QuickFinder
2006-03-28 22:54
2006.04.16
Delphi5 for Windows x64


2-1143773415
Barabashka
2006-03-31 06:50
2006.04.16
Небольшая проблема


8-1131366861
HEXO4YXA
2005-11-07 15:34
2006.04.16
ActiveX в AVI :)


2-1143557336
FastProgrammer
2006-03-28 18:48
2006.04.16
Потоки


2-1144061350
serg111111
2006-04-03 14:49
2006.04.16
Приложение в треере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский