Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
-= 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
14-95977
daan_m
2002-08-05 12:41
2002.08.29
WinAPI для WinXP


14-95941
PVOzerski
2002-08-03 14:00
2002.08.29
Не знает ли кто компонент?


1-95812
lipskiy
2002-08-15 01:46
2002.08.29
Можно ли получить имя процедуры/функции в строковую переменную?


3-95686
RDA
2002-08-08 11:50
2002.08.29
Использование справочников


3-95637
DeniM
2002-08-07 16:51
2002.08.29
Как же все-таки правильно написать SQL запрос в дельфи? (+)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский