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

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

Строку в список


KK ©   (2009-07-30 12:22:00) 

написал метод который преобразует строку вида:
'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;


KK   (2009-07-30 12:34:00) [1]

спасибо, теперь все ok


Anatoly Podgoretsky   (2009-07-30 12:28:00) [2]

> KK  (30.07.2009 12:22:00)  [0]

StringReplace


clickmaker   (2009-07-30 12:26:00) [3]

впрочем, если разбирать посимвольно, то Delete не нужна
просто, проходя по строке, отбирай только символы в диапазоне ['0'..'9', '-', ',']


clickmaker   (2009-07-30 12:25:00) [4]

> если строка вводится как:
>
> '1  -   7, 9,11-1  5'

ну так убери все символы, которые не цифры, не дефис и не запятая
Delete()


Наверх

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