Главная страница
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.012 c
2-1249308906
DevilDevil
2009-08-03 18:15
2009.10.04
Не получается сделать контекстное меню


2-1248680807
ford
2009-07-27 11:46
2009.10.04
TWordApplication выдает ошибку - "вызов был отклонен"


2-1245821819
Elun
2009-06-24 09:36
2009.10.04
AlphaControls+TImage


2-1249022316
webpauk
2009-07-31 10:38
2009.10.04
Позиция курсора


15-1248944170
test
2009-07-30 12:56
2009.10.04
Видео карты 9600GT(260) VS EAH4850