Thema: Delphi Nummernangaben parsen

Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 4. Nov 2002, 16:16
Dein Code sieht schon ein bisschen umfangreich aus.

Der folgende Code erledigt genau dasselbe. Nur ist er etwas kompakter.
Code:
[b]type[/b]
  TWordList = [b]Array[/b] [b]of[/b] Word;
  TCharArray = [b]Array[/b] [b]of[/b] Char;

[b]function[/b] ParseList([b]const[/b] PortList: [b]String[/b]): TWordList;
[b]var[/b]
  F, P, Sep: PChar;
  s: [b]string[/b];
  i, Len, LoRange, HiRange: Integer;
[b]begin[/b]
  SetLength(Result, 0);

  F := PChar(PortList);
  P := F;
  [b]while[/b] P^ <> #0 [b]do[/b]
  [b]begin[/b]
    [b]while[/b] (P^ <> #0) [b]and[/b] ([b]not[/b] (P^ [b]in[/b] ['-', ',', ';'])) [b]do[/b] Inc(P);

    [b]if[/b] P^ = '-' [b]then[/b]
    [b]begin[/b]
      Sep := P;
     [color=#000080][i]// Ende suchen[/i][/color]
      [b]while[/b] (P^ <> #0) [b]and[/b] ([b]not[/b] (P^ [b]in[/b] [',', ';'])) [b]do[/b] Inc(P);
      SetString(s, F, Sep - F);
      LoRange := StrToIntDef(s, -1);
      Inc(Sep);
      SetString(s, Sep, P - Sep);
      HiRange := StrToIntDef(s, -1);
    [b]end[/b] [b]else[/b]
    [b]begin[/b]
      SetString(s, F, P - F);
      LoRange := StrToIntDef(s, -1);
      HiRange := LoRange;
    [b]end[/b];
    [b]if[/b] (LoRange = -1) [b]or[/b] (HiRange = -1) [b]or[/b]
       (LoRange > HiRange) [b]or[/b] (HiRange > High(Word))[b]then[/b]
      [b]raise[/b] Exception.Create('Ungültige Port Liste');
    Len := Length(Result);
    SetLength(Result, Len + HiRange - LoRange + 1);
    [b]for[/b] i := LoRange [b]to[/b] HiRange [b]do[/b]
      Result[Len + i - LoRange] := i;

    [b]if[/b] P^ <> #0 [b]then[/b] Inc(P); [color=#000080][i]// ';', '-' überspringen[/i][/color]
    F := P;
  [b]end[/b];
[b]end[/b];
  Mit Zitat antworten Zitat