Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Function optimieren (https://www.delphipraxis.net/88797-function-optimieren.html)

delphinia 21. Mär 2007 10:40


Function optimieren
 
kann man dieses optimieren bzw. kürzen?



Delphi-Quellcode:
r := '45_78_754#9254_486_715';

      p1 := Pos('_', r);
      t := Copy(r, p1 + 1, Length(r));
      s1 := Copy(r, 0, p1 - 1);

      p1 := Pos('_', t);
      t2 := Copy(t, p1 + 1, Length(t));
      s2 := Copy(t, 0, p1 - 1);

      p1 := Pos('#', t2);
      t := Copy(t2, p1 + 1, Length(t2));
      s3 := Copy(t2, 0, p1 - 1);

      p1 := Pos('_', t);
      t2 := Copy(t, p1 + 1, Length(t));
      s4 := Copy(t, 0, p1 - 1);

      p1 := Pos('_', t2);
      t := Copy(t2, p1 + 1, Length(t2));
      s5 := Copy(t2, 0, p1 - 1);

      rs := Format('%s.%s.%s %s:%s:%s', [s1, s2, s3, s4, s5, t]);

chrisw 21. Mär 2007 10:59

Re: Function optimieren
 
Man könnte das mit ein bzw zwei StringListen machen:

Delphi-Quellcode:
  sl := TStringList.Create;
  sl1 := TStringList.Create;
  sl.Delimiter := '_';
  sl.DelimitedText := '45_78_754#9254_486_715';
  sl1.Delimiter := '#';
  sl1.DelimitedText := sl[2];
  showmessage(Format('%s.%s.%s %s:%s:%s',[sl[0],sl[1],sl1[0],sl1[1],sl[3],sl[4]]);
  sl.Free;
  sl1.Free;

Vielleicht könnte man ja auch 'ne Kombination aus Deinem und meinem Code nehmen.
(Eine Stringlist für 2 Zahlen lohnt sich irgendwie nicht)


Christian

Moony 21. Mär 2007 11:24

Re: Function optimieren
 
Wie wärs damit:

Delphi-Quellcode:
  r  := '45_78_754#9254_486_715';
  txt := r;
  Lst := TStringList.Create;
  try
    for i := 0 to 5 do
    begin
      case i of
        2: mySign := '#'
        else mySign := '_';
      end;

      p1 := Pos(mySign, txt);
      if p1 > 0 then
         Lst.Add(Copy(txt, 1, p1 - 1))
      else Lst.Add(txt);
      txt := Copy(txt, p1 + 1, Length(txt) - p1);
    end;
    rs := Format('%s.%s.%s %s:%s:%s',[Lst.Strings[0],Lst.Strings[1],Lst.Strings[2],Lst.Strings[3],Lst.Strings[4],Lst.Strings[5]]);
  finally
    Lst.Free;
  end;
Die StringList kannst du auch gegen ein array[0..5] of String ersetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz