Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.04;
Скачать: CL | DM;

Вниз

Строку в список   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
2-1249027346
xyz
2009-07-31 12:02
2009.10.04
из-за чего ADOCommand1.Execute выдает 1 запись, когда их много


15-1249035025
Mixa
2009-07-31 14:10
2009.10.04
Нужно написать ПО для флешки


8-1190981674
Inspired
2007-09-28 16:14
2009.10.04
Использование пульта ДУ для альт. целей


2-1249027595
webpauk
2009-07-31 12:06
2009.10.04
Рисование в TEdit


1-1218789274
dmitry_12_08_74
2008-08-15 12:34
2009.10.04
Как заставить таскбар развернуться, чтобы показать все иконки?