Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "doppelten code" vermeiden? (https://www.delphipraxis.net/14869-doppelten-code-vermeiden.html)

Pseudemys Nelsoni 17. Jan 2004 09:27


"doppelten code" vermeiden?
 
hoi, in einem anderem thread hab ich diesen code gepostet gehabt:

Delphi-Quellcode:
      begin
        Delete(params, 1, Pos(':', params)+1);
        Trim(params);
        while params <> '' do
        begin
          if Pos(' ', params) > 0 then
          begin
            SetLength(NickInfo, high(NickInfo)+1);
            NickInfo[high(NickInfo)].Nick := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            NickInfo[high(NickInfo)].ClanID := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            NickInfo[high(NickInfo)].LongIP := Copy(params, 1, Pos(' ', params)-1);
            Delete(params, 1, Pos(' ', params));
          end
          else
          begin
            SetLength(NickInfo, high(NickInfo)+1);
            NickInfo[high(NickInfo)].Nick := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            NickInfo[high(NickInfo)].ClanID := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            NickInfo[high(NickInfo)].LongIP := Copy(params, 1, Pos('', params)-1);
            Delete(params, 1, Pos('', params));
          end;
        end;
      end;
wie man sieht sind der block oben und unten fast gleich, bis auf ' ' und '' (letzte beiden zeilen)

es geht darum das ich z.b die wörter aus einem string holen möchte, sagen wir mal der string sieht z.b so aus:

Zitat:

bla1 bla2 bla3 bla4 bla5
um alle wörter dort rauszubekommen müsste ich ja bis pos ' ' -1 kopieren.
beim letzten wort gibt es aber kein whitespace mehr, sondern das ende ''... nur dafür hab ich den ganzen code nochmal schreiben müssen? (siehe 2ten block)

es muss doch auch anders gehen oder?

mfg

SirThornberry 17. Jan 2004 09:32

Re: "doppelten code" vermeiden?
 
So sollte es gehen
Delphi-Quellcode:
var helpstring: String;
begin
[...]
if Pos(' ', params) > 0 then helpstring := ' ' else helpstring := '';
[...]
NickInfo[high(NickInfo)].LongIP := Copy(params, 1, Pos(helpstring, params)-1);
Delete(params, 1, Pos(helpstring, params));

Pseudemys Nelsoni 17. Jan 2004 10:31

Re: "doppelten code" vermeiden?
 
da hätt ich idiot auch drauf kommen können, danke sirthornberry :mrgreen:

himitsu 17. Jan 2004 12:13

Re: "doppelten code" vermeiden?
 
Noch ein paar kleine Fragen zu deinem Code:

Delphi-Quellcode:
Trim(params);
Bist du sicher, das hier auch das gemacht wird, was du willst?

Ich denke mir mal, es sollt wohl eher so aussehn:
Delphi-Quellcode:
params := Trim(params);


und dieser Teil dürft wohl auch nicht die gewünschten Resultate bringen:
Delphi-Quellcode:
Pos('', params)
Bei mir ist das Ergebnis immer 0:
Delphi-Quellcode:
Pos('', params) = 0
Du könntest ja an params einfach ein ' ' anhängen, dann hat sich dein Problem gelöst:
Delphi-Quellcode:
      begin
        Delete(params, 1, Pos(':', params)+1);
        params := Trim(params) + ' ';
        while params <> '' do
        begin
          SetLength(NickInfo, high(NickInfo)+1);
          NickInfo[high(NickInfo)].Nick := Copy(params, 1, Pos(',', params)-1);
          Delete(params, 1, Pos(',', params));
          NickInfo[high(NickInfo)].ClanID := Copy(params, 1, Pos(',', params)-1);
          Delete(params, 1, Pos(',', params));
          NickInfo[high(NickInfo)].LongIP := Copy(params, 1, Pos(' ', params)-1);
          Delete(params, 1, Pos(' ', params));
        end;
      end;
oder du arbeitest sauber (ohne vorher ein Pseudoleerzeichen anzuhängen) und machst das mit Length(params), was dann zum wegfallen von Copy und Delete führt:
Delphi-Quellcode:
      begin
        Delete(params, 1, Pos(':', params)+1);
        Trim(params);
        while params <> '' do
        begin
          if Pos(' ', params) > 0 then
          begin
            SetLength(NickInfo, high(NickInfo)+1);
            NickInfo[high(NickInfo)].Nick := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            NickInfo[high(NickInfo)].ClanID := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            NickInfo[high(NickInfo)].LongIP := Copy(params, 1, Pos(' ', params)-1);
            Delete(params, 1, Pos(' ', params));
          end
          else
          begin
            SetLength(NickInfo, high(NickInfo)+1);
            NickInfo[high(NickInfo)].Nick := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            NickInfo[high(NickInfo)].ClanID := Copy(params, 1, Pos(',', params)-1);
            Delete(params, 1, Pos(',', params));
            {NickInfo[high(NickInfo)].LongIP := Copy(params, 1, Length(params));}
            NickInfo[high(NickInfo)].LongIP := params;
            {Delete(params, 1, Length(params));}
            params := '';
          end;
        end;
      end;

Pseudemys Nelsoni 17. Jan 2004 13:11

Re: "doppelten code" vermeiden?
 
mit dem trim hast du recht *g*

Zitat:

und dieser Teil dürft wohl auch nicht die gewünschten Resultate bringen:
Source:
Pos('', params)
wo hab ich denn "Pos('', params)" stehen?


Zitat:

Du könntest ja an params einfach ein ' ' anhängen, dann hat sich dein Problem gelöst:
das is auch ne gute idee, danke ;D

bei deinem letzten tip hab ich dann aber doch wieder 2 blöcke, also das mit dem "unsauberem" war mir doch lieber,

also thx :]

himitsu 24. Jan 2004 20:46

Re: "doppelten code" vermeiden?
 
Mir währe die 1. Variante auch lieber ;)

Zitat:

wo hab ich denn "Pos('', params)" stehen?
Code:
      begin
        Delete(params, 1, Pos(':', params)+1);
        Trim(params);
        while params <> '' do
        begin
          if Pos(' ', params) > 0 then
          begin
            ...
          end
          else
          begin
            ...
            NickInfo[high(NickInfo)].LongIP := Copy(params, 1, [color=red]Pos('', params)[/color]-1);
            Delete(params, 1, [color=red]Pos('', params)[/color]);
          end;
        end;
      end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.

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