![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разбитие строки. [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