Текущий архив: 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.46 MB
Время: 0.007 c