Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизОптимизация кода. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c