Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

Оптимизация кода.   Найти похожие ветки 

 
zamkom ©   (2004-02-18 14:10) [0]

Уважаемые мастера есть код:
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="1") then DbCrTemp :="30301810000000000014" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="2") then DbCrTemp :="30301810700000000013" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="3") then DbCrTemp :="30301810300000000015" else begin
If (CrBIC="044030857") and (Copy(CrLicAcc,13,1)="4") then DbCrTemp :="30301810900000000017" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="5") then DbCrTemp :="30301810400000000012" else begin
If (CrBIC="044585220") and (Copy(CrLicAcc,13,1)="6") then DbCrTemp :="30301810800000000010" else begin
If (CrBIC="049003765") and (Copy(CrLicAcc,13,1)="7") then DbCrTemp :="30301810200000000018" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="8") then DbCrTemp :="30301810100000000008" else begin
If (CrBIC="049011717") and (Copy(CrLicAcc,13,1)="9") then DbCrTemp :="30301810100000000011" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,12,2)="10") then DbCrTemp:="30301810400000000025" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="0") then DbCrTemp :=CrLicAcc else begin
DbCrTemp :="30102810500000000001";
end; end; end; end; end; end; end; end; end; end; end;
blockrezult[46]:="КРЕДИТ :"+ DbCrTemp;


Можно ли этот код как нибудь оптимизировать. Т.е. обойти все эти IF.


 
Amoeba ©   (2004-02-18 14:20) [1]

обойти все эти IF
нельзя. Возможность оптимизации не просматрвается. Единственно что вся эта масса begin и end представляется в данном коде совершенно излишней.


 
Тимохов ©   (2004-02-18 14:21) [2]

Можно.
Надо описать массив записей
rec = record
crbic: string;
ctlicacc: string;
ctlicacc_start: integer;
ctlicacc_len: integer;
dbcrtemp: string;
end;
например для первого ифа занести в рекорд

crbic="049033764"
ctlicacc="1"
ctlicacc_start=13
ctlicacc_len=1
dbcrtemp=30301810000000000014

и так для каждого

В цикле проверять значения.
Для последнего if также можно что-нить придумать.


 
Тимохов ©   (2004-02-18 14:22) [3]


> Amoeba © (18.02.04 14:20) [1]

Было бы желание, а обойти можно.


 
Digitman ©   (2004-02-18 14:23) [4]

1. занести константы в массив и вести цикл.поиск нужного эл-та массива, возвращая индекс найденного

2. для каждой строковой константы расчитать заранее CRC32

case GetCRC32(CrBIC) of
123245435: ...
847522535: ...
... и т.д.
end;


 
Amoeba ©   (2004-02-18 14:32) [5]


> Было бы желание, а обойти можно.

Только оптимизацией это


 
Евгений(Забыл пароль)   (2004-02-18 14:33) [6]

А что за банк-то, где такие програмисты ?


 
Radionov Alexey ©   (2004-02-18 14:36) [7]

"В лоб", без дурацких в данном месте Copy:

DbCrTemp := "30102810500000000001";
If Length(CrLicAcc) < 13 Then exit;
If (CrBIC = "049033764") Then
Case CrLicAcc[13] Of
"0": DbCrTemp := CrLicAcc;
"1":
If (Length(CrLicAcc) > 13) And (CrLicAcc[13] = "0") Then
DbCrTemp := "30301810400000000025"
Else
DbCrTemp := "30301810000000000014";
"2": DbCrTemp := "30301810700000000013";
"3": DbCrTemp := "30301810300000000015";
"5": DbCrTemp := "30301810400000000012";
"8": DbCrTemp := "30301810100000000008";
End
Else
If (CrBIC = "044030857") And (CrLicAcc[13] = "4") Then
DbCrTemp := "30301810900000000017"
Else
If (CrBIC = "044585220") And (CrLicAcc[13] = "6") Then
DbCrTemp := "30301810800000000010"
Else
If (CrBIC = "049003765") And (CrLicAcc[13] = "7") Then
DbCrTemp := "30301810200000000018"
Else
If (CrBIC = "049011717") And (CrLicAcc[13] = "9") Then
DbCrTemp := "30301810100000000011";

blockrezult[46] := "КРЕДИТ :" + DbCrTemp;


 
Тимохов ©   (2004-02-18 14:38) [8]


> Amoeba © (18.02.04 14:32) [5]

Оптимизация вообще понятие растяжимое.


 
Radionov Alexey ©   (2004-02-18 14:45) [9]

К посту Radionov Alexey © (18.02.04 14:36) [7]:

Сорри, поправочка для case:

Case CrLicAcc[13] Of
"0":
If (CrLicAcc[12] = "1") Then
DbCrTemp := "30301810400000000025"
Else
DbCrTemp := CrLicAcc;
"1": DbCrTemp := "30301810000000000014";
"2": DbCrTemp := "30301810700000000013";
"3": DbCrTemp := "30301810300000000015";
"5": DbCrTemp := "30301810400000000012";
"8": DbCrTemp := "30301810100000000008";
End


 
zamkom ©   (2004-02-18 15:18) [10]

Спасибо всем за ответы.


 
Silver_ ©   (2004-02-18 17:46) [11]

Case StrToInt(Copy(CrLicAcc,13,1)) of
0:
if CrBIC="..." then ...
1:
if CrBIC="..." then ...
...
9:
if CrBIC="..." then ...
else //10:
if CrBIC="..." then ...
end;



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-94172
Igor_thief
2004-02-06 16:51
2004.02.29
Tstrings или TstringsList


6-94060
BlackSun
2003-12-21 20:59
2004.02.29
Как скачать файл в поток?


7-94195
Dima_dvp
2003-10-24 01:27
2004.02.29
DircetX или OpenGL запущен или нет.


6-94062
NoIdeaAboutName
2003-12-22 22:52
2004.02.29
Как отловить установление dialup соединения,.


1-93986
Aliev
2004-02-17 12:17
2004.02.29
Мигалка