[fpc-pascal] If vs case or something else?
Ched
charles.edouard.des.vastes.vignes at gmail.com
Thu Jul 6 23:06:47 CEST 2017
Hi Stefan,
You can skip large blocks of tests coding like this
If Length(txt)>0 then
case txt[1] of
'a': if txt='another' then
...
else if txt='anum' then
...;
'b': if txt="bubble' then
...
else if ...
else
...
end;
Not as fast as a tree search balanced with probabilities (no answer to my question on the list afew days
ago...), but probably ten time faster then what you proposed.
Cheers, Ched'
Le 06.07.2017 à 20:41, Stefan V. Pantazi a écrit :
> That is quite the case statement you have there. You may benefit greatly from re-analyzing and
> refactoring your programs by splitting them in multiple individual units, if possible. That should be
> perfectly possible if Dosomething(); DoSomethingelse(); keep repeating across your 70+ switch cases.
>
> Anyway, here you go, you can try something like the attached.
>
> Good luck!
>
> Stefan
>
>
>
> On 07/06/2017 12:33 PM, James Richters wrote:
>> I'm trying to optimize a console application ported over from Turbo Pascal with a huge set of if then
>> else statements like this:
>>
>> Var
>> TXT : String;
>> If TXT = 'Thing1' then
>> Begin
>> Dosomething();
>> DoSomethingelse();
>> End
>> else
>> If TXT = 'AnotherThing' then
>> Begin
>> Dosomethinganotherway();
>> DoSomethingelsetoo();
>> End
>> Else
>> If TXT = 'Thing3' then
>> Begin
>> Dosomethingathirdtime();
>> DoSomethingelse3();
>> End
>> else .... etc.. over 70 times... etc
>>
>> It works but it's hard to follow and not so fast. It has to run through this for every line of a file
>> to see what's in the file and do the right things with it.
>> So I'm thinking of undertaking a huge re-organization of it and I'm wondering what the best way would
>> be to do it.
>>
>> I can use case statement with strings apparently now, but the thing is, I create this file myself in
>> an earlier stage, so I do not need to create the file with strings at all, I could use some codes and
>> do something like this:
>>
>> Const
>> Thing1 = 1
>> Another_Thing = 2
>> Thing3 = 3
>> Var
>> Codenum: Word;
>>
>> Case Codenum of
>> Thing1: Begin
>> DoSomethng()
>> DoSomethingElse()
>> End;
>> Another_Thing: Begin
>> ... etc ...
>>
>>
>> I'm guessing that would be faster as I wouldn't have to keep evaluating all the strings for every
>> condition. As I was searching for the best way to do this, I came across something about making an
>> Array of Procedures, or something to that effect. Does anyone know how to do that, and are there
>> performance advantages to doing that? It's going to take a bit of work to straighten all this out so
>> it would be best if I just did it the best way instead of doing it one way then finding out it could
>> have been better another way. Any other ideas on how to handle this?
>>
>> Any advice on this is greatly appreciated
>>
>> James
>>
>>
>>
>>
>> _______________________________________________
>> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
>> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>>
>
>
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
More information about the fpc-pascal
mailing list