[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