Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
ВнизСтроку в список Найти похожие ветки
← →
KK (2009-07-30 12:22) [0]написал метод который преобразует строку вида:
"1-3, 9, 11-13" в список значений вида:
1
2
3
9
11
12
13
Код в принципе работает, но хотелось бы его улучшить, например, если строка вводится как:
"1 - 7, 9,11-1 5"
то алгоритм работает неправильно. Помогите с оптимизацией. Заранее спасибо.procedure Tfrm_Main.Button1Click(Sender: TObject);
procedure SetAsString(const Value: string; List: TStrings);
var
P, P1: PChar;
S: string;
i, Pos_, H, L: Integer;
begin
List.Clear;
P := PChar(Value);
while P^ in [ #1.." "] do
P := CharNext(P);
while P^ <> #0 do
begin
P1 := P;
while (P^ > " ") and (P^ <> ",") do
P := CharNext(P);
SetString(S, P1, P - P1);
Pos_ := Pos("-", S);
if Pos_ > 0 then
begin
L := StrToInt(Copy(S, 1, Pos_ - 1));
H := StrToInt(Copy(S, Pos_ + 1, Length(S) - Pos_ + 1));
for I := L to H do
List.Add(IntToStr(I));
end
else
List.Add(S);
while P^ in [ #1.." "] do
P := CharNext(P);
if P^ = "," then
begin
P1 := P;
repeat
P := CharNext(P);
until not (P^ in [ #1.." "]);
end;
end;
end;
begin
SetAsString("1-7, 9, 11-15", lstb_Items.Items);
end;
← →
clickmaker © (2009-07-30 12:25) [1]> если строка вводится как:
>
> "1 - 7, 9,11-1 5"
ну так убери все символы, которые не цифры, не дефис и не запятая
Delete()
← →
clickmaker © (2009-07-30 12:26) [2]впрочем, если разбирать посимвольно, то Delete не нужна
просто, проходя по строке, отбирай только символы в диапазоне ["0".."9", "-", ","]
← →
Anatoly Podgoretsky © (2009-07-30 12:28) [3]> KK (30.07.2009 12:22:00) [0]
StringReplace
← →
KK (2009-07-30 12:34) [4]спасибо, теперь все ok
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c