Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разбитие строки. [D7, XP]


Alral ©   (2006-08-25 15:40:00) 

Вопрос:
У меня строка String. Для примера: 2; 25; 1; 9; 7; 212. Как ее разделить на отдельные строки (2 25 1 9 7 212 ...).


tButton   (2006-08-25 21:39:00) [1]

в принципе, на модификацию исходной строки можно вообще запоминать
(в конце концов известно где закончилась предыдущая)
я просто ставил целью максимальню наглядность.


default   (2006-08-25 18:42:00) [2]

tButton ©   (25.08.06 18:23) [9]
код Copy, Delete,... можно посмотреть в исходниках
как надо делать смотреть в  коде
"procedure TStrings.SetTextStr(const Value: string);"
если разделителей может быть много можно добавить Pos, но идеология останется парсинга останется та же


tButton   (2006-08-25 18:23:00) [3]

только ради "не учить плохому"?
   source:=Copy(source, p+l, length(source));
ну только длину сорца нужно предварительно замерять.

а чем delete так плох?


default   (2006-08-25 18:11:00) [4]

tButton ©   (25.08.06 17:34) [5]
не мешало бы крайне непроизводительный delete убрать
с ним код превращается в убожество которое думаю будет ещё менее производительней, чем код из [3] который я привёл только ради показа идеи


tButton   (2006-08-25 18:05:00) [5]


> Virgo_Style ©   (25.08.06 17:41) [6]

резонно =)


Virgo_Style   (2006-08-25 17:41:00) [6]

tButton ©   (25.08.06 17:34) [5]
imho красивее будет ... else list.Clear;%-)


tButton   (2006-08-25 17:34:00) [7]

 if list = nil then list:=tStringList.Create;
после этой строки не помешает
list.Clear;


tButton   (2006-08-25 17:32:00) [8]

procedure parse(source, sep: string; list: tStringList);
var
 p: integer;
 s_b: string;
 l: integer;
begin
 if list = nil then list:=tStringList.Create;
 l:=length(sep);
 if length(source)<=l then exit;
 p:=pos(sep, source);
 while p>0 do begin
   s_b:=Copy(source, 1, p-1);
   delete(source, 1, p+l-1);
   list.Add(s_b);
   p:=pos(sep, source);
 end;
 list.Add(source)
end;


default   (2006-08-25 17:02:00) [9]

function BreakLine(Str: String; BreakChar: Char): TStrings;
begin
 Result := TStringList.Create;
 Result.Text := StringReplace(Str, BreakChar, #13, [rfReplaceAll]);
end;

....
Memo1.Lines := BreakLine('1!;2!;3!;;2!',            ';');

можешь такое попробовать, проблем тех, что есть с [1] быть не должно


Palladin   (2006-08-25 15:47:00) [10]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1156145761&n=18


MBo   (2006-08-25 15:45:00) [11]

c помощью TStringList.DelimitedText


Наверх

Титульная страница Поиск, карта сайта Написать письмо