Главная страница
    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.46 MB
Время: 0.009 c
3-95651
SlavaK
2002-08-07 18:11
2002.08.29
Delphi-SQLServer


3-95640
Kyt
2002-08-07 16:41
2002.08.29
Insert в откатываемой транзакции


3-95724
NDR
2002-08-09 14:09
2002.08.29
F1,F2,F3


1-95807
skandig
2002-08-19 22:06
2002.08.29
диаграммы из Acces


1-95758
CashDi
2002-08-19 13:21
2002.08.29
регулярные выражения





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