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

Вниз

Разделение строки. Что неправильно?   Найти похожие ветки 

 
-= Like =-   (2002-08-19 16:26) [0]

Здравствуйте. Не поможете разделить строку на три части?
Строка имеет вид - "... ... ...", то есть три числа, разделённые между собой пробелами. Числа могуть быть разные: одно-, двух- и трёхзначные. Я попыталься разделить, но что-то не ладиться:

var
Pat1,Pat2,Pat3, s: String;

//Читаю строку и заношу в переменную "s"
s := Reg.ReadString("Background");

//Разделяю строки (здесь всё нормально)
Pat1 := Copy(s, 0, pos(" ", s)-1);
//Здесь хуже
Pat2 := Copy(s, pos(" " ,s)+1, pos(" ", s)+1);
//А здесь совсем плохо
Pat3 := Copy(s, pos(" ", s)+5, length(s));

//Здесь вывожу результат
ShowMessage(Pat1+" - "+Pat2+" - "+Pat3);


 
Mike Kouzmine   (2002-08-19 16:32) [1]

После copy делай delete


 
McSimm ©   (2002-08-19 16:33) [2]


> Pat1 := Copy(s, 0, pos(" ", s)-1);

надо Copy(s, 1, ...

Pos(" ", s) во всех случаях возвращает позицию первого пробела в строке


 
Unreg   (2002-08-19 16:35) [3]

В функции copy третий параметр - длина копируемой строки.
У всё пойдёт лучше, если после первого copy ты удалишь первое число-строку...
А вообще-то тебе debug сказал бы ВСЁ!


 
lenin ©   (2002-08-19 16:35) [4]

var
Pat1,Pat2,Pat3, s: String;

s := Reg.ReadString("Background");

Pat1 := Copy(s, 1, pos(" ", s)-1);
delete(s,1,pos(" ", s));
Pat3 := Copy(s, 1, pos(" ", s)-1);
delete(s,1,pos(" ", s));
Pat3 := s;

ShowMessage(Pat1+" - "+Pat2+" - "+Pat3);


 
Ura   (2002-08-19 16:40) [5]

// Считываем два числовых данных и текста -strConst
// И переводим их в число
str_T:=copy(strConst,1,pos(" ",strConst));
str_T := Trim(str_T);
val(str_T,X,code);
if Code = 0 then
begin
delete(strConst,1,pos(" ",strConst));
str_mV := Trim(strConst);
val(str_mV,Y,code);
if Code = 0 then begin
// end
else


 
Yuri-7   (2002-08-19 16:43) [6]

Попробуй по-другому обрабатывать разделитель, например:
procedure TForm1.Button1Click(Sender: TObject);
Var
ar: array [1..3] of string;
S: String;
n,i: integer;
Begin
s:="111 222 333";
n:=1;
ar[1]:="";ar[2]:="";ar[3]:="";
for i:=1 to Length(s) do
begin
if s[i]=" " then Inc(n)
else ar[n]:=ar[n]+s[i];
end;
ShowMessage(ar[1]+"-"+ar[2]+"-"+ar[3]);
end;


 
MBo ©   (2002-08-19 16:46) [7]

slist:=tstringlist.create;
slist.commatext:=s;
теперь каждый slist[i] содержит отдельную подстроку
Все.


 
Мефодий   (2002-08-19 17:16) [8]

Вот вариант для общего случая:

var s,sub_str,show_str: string;
Pat: array of string;
i: integer;

s := Reg.ReadString("Background"); sub_str := "";
show_str := "";
for i := 1 to Length(s) do
begin
if s[i] <> " " then
sub_str := sub_str + s[i];
if (s[i] = " ") or (i = Length(s)) then
begin
if Length(Trim(sub_str)) > 0 then
begin
SetLength(Pat,Length(Pat)+1);
Pat[High(Pat)] := sub_str;
show_str := show_str + sub_str;
if i < Length(s) then
show_str := show_str + " - ";
end;
sub_str := "";
end;
end;
ShowMessage(show_str);



 
-= Like =-   (2002-08-19 17:22) [9]

Ну, ребята, спасибо.
Помогли.


 
Мефодий   (2002-08-19 17:46) [10]

Исправление к моему ответу:

после строки

s := Reg.ReadString("Background");

нужно еще добавить

sub_str := "";


 
-= Like =-   (2002-08-19 17:59) [11]

2Мефодий (19.08.02 17:46)

Так там же есть!


> s := Reg.ReadString("Background"); sub_str := "";
> show_str := "";
> for i := 1 to Length(s) do




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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
6-95924
Monak
2002-06-20 20:19
2002.08.29
IP и хост


4-96020
Дмитрий К.
2002-06-26 16:51
2002.08.29
Реакция на нажатие кнопки


3-95636
exciter_
2002-08-07 15:34
2002.08.29
IB6. Доступ к таблице в другой GDB.


1-95741
Александр
2002-08-18 14:31
2002.08.29
ListView


1-95772
Дмитрий Иванов
2002-08-19 03:14
2002.08.29
рисуем меню