Solved

# optimizing code

Posted on 2001-07-31
179 Views
can someone help me tell me how to optimize this code ?

(this is just a test, trying to wrap some IRC command)
:)

procedure TForm1.Button1Click(Sender: TObject);
var
Position1,Position2: Integer;
nick,command, temp : string;

begin
nick := ':Berzerk1!~Berzerk1@ti13a80-0306.bb.online.no JOIN :#skien';
temp := nick;
command := temp;
delete(temp,1,lastdelimiter(':',temp));
delete(command,1,pos(' ',command));
delete(command,pos(' ',command),length(command));
Position1 := Pos(':',nick) + 1;
Position2 := Pos('!',nick);
nick := Copy(nick,Position1, Position2 - Position1);
ShowMessage(nick + ':' + temp + '+' + command);
end;
0
Question by:joepezt
• 3

LVL 6

Accepted Solution

MannSoft earned 50 total points
Here is some shorter code:

S := 'Berzerk1!~Berzerk1@ti13a80-0306.bb.online.no JOIN :#skien'
Nick := Copy(S, 1, Pos('!', S) - 1);
Delete(S, Pos(' ', S);
Command := Copy(S, 1, Pos(' ', S) - 1);
Delete(S, Pos(' ', S + 1);
Channel := S;

Of course that will only work specifically for the JOIN command.  I wrote an IRC program awhile ago.  Here is how I handled server messages (just ignore if you are not interested in writing a client of your own :-) )

1) I called a function that split the string into a TStringList (split at each space of course).
2) I checked element 1 to see what the command/numeric was
3) I called another function to combine the last X elements of the stringlist.  The value of X depended on which command/numeric it was.  The leading : was also stripped by this function
4) If required, I called yet another function with element 0 as a paramter, and it returned everything up to the ! (to get the nick of the sender)

By using functions for these things it helps seperate your code and (IMO) makes things much easier to work with.
0

LVL 14

Expert Comment

Umm...

procedure Test(InputString: string);
var
StringList: TStringList;
Nick, Command, Channel: string;
begin
InputString := StringReplace(InputString,
' ', #13, [rfReplaceAll]);
InputString := StringReplace(InputString,
'!', #13, [rfReplaceAll]);
StringList := TStringList.Create;
try
StringList.Text := InputString;
Nick := StringList.Strings[0];
Command := StringList.Strings[2];
Channel := StringList.Strings[3];
finally
StringList.Free;
end;
end;

:)
0

LVL 2

Author Comment

will test some of these :)

i have an open source IRC component i was starting on a while ago, http://www.berzerk.net

http://www.delphi3d.net/articles/viewarticle.php?article=console.htm

0

LVL 2

Author Comment

will test some of these :)

i have an open source IRC component i was starting on a while ago, http://www.berzerk.net

http://www.delphi3d.net/articles/viewarticle.php?article=console.htm

0

LVL 2

Author Comment

nice ..
well, if you are interrested, you CAN if you want to check out the component i made..

http://vortex.berzerk.net
0

## Featured Post

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …